0
Posted on 11:13:00 by Unknown and filed under

  总不能在标题上就写如何盗链吧...

  Referer 是 HTTP Header 的一个字段(wiki),包含在向服务器发送的请求中,记录访客的来源URI。

  很多网站用辨识 Referer 来防止盗链,比如百度、网易相册。以猫扑上的图片为例,如果我们直接访问,或者外链到其他网站,就会显示不出。因为猫扑的服务器判断 Referer 信息,发现不是来自自身网站,就对该请求予以拒绝。

  如果网站的防盗链措施只是基于 Referer 判断,可以通过伪造 Referer 来实现外链。比如 Firefox 的 RefControl 扩展。但是依据安全性(The setRequestHeader() method),不能要求用户浏览器发送伪造的 Referer。

  所以早期使用 JavaScript 利用 XMLHttpRequest 设置 Referer,早期的 Flash 通过 ActionScript 构造请求的时候,自定义 Referer 的方法现在都被禁止了。

  既然不能强制客户端设置 Referer,那只能通过服务器中转的方式,因为在服务器端就可以构造自定义请求了。

  对于网站管理者来说,防止盗链的方式就很多了,比如利用 Session,判断 IP,生成随机码等等方式...

0
Posted on 03:10:00 by Unknown and filed under

  Python 允许通过 exec 和 eval 执行以字符串形式表示的代码片段,这体现了动态语言的特性。利用这种特性,可以让代码变得更灵活。不过一直以来,我对这种"动态"的用法不太"适应",因为:

  1. 让代码引入了某些不安定因素,这些代码片段执行后可能对全局造成影响。尤其是当使用全局名称空间时,它的作用范围难以控制。
  2. 对执行的效率也有影响。Python 在执行代码之前也是要预编译的,比如 pyc 文件。因此这些字符串形式的代码片段在执行的时候,需要编译的过程,哪怕是使用 compile 编译后重复使用,第一次的编译是难以避免的。

  很多人也倾向于避免这种用法,比如:Use of eval in Python?

  不过最近在写网站解析程序的时候,发现为了实现目的,最好的解决方案还是引入这种字符串形式的代码片段。这个问题具体描述是:我需要对一系列类似的网站进行解析。整体的解析过程是相似的,所以我建立了一个框架,使用 XML 保存每个站点各自的解析属性,通常是 XPath 和正则表达式。但是某些内容各个网站的表现方式有很大差别,这些内容想要解析出来只使用 XPath 和正则表达式是不够的。因此对这些例外情形,最好的方式是直接利用代码片段来计算。

  此外,现有的项目,比如 Genshi 之类模板引擎也采用了类似的处理手段。

  用户使用程序如果能执行自己的代码片段,这往往是有潜在危险的,尤其是在网络服务中,因此我们在使用的字符串代码片段的时候,要严格限制名称空间。对这个问题的讨论,可以参考 Using eval() safely in python,这里做一个简要的总结。

  默认的,eval 和 exec 所运行的代码都位于当前的名称空间中,它们也可以接受一个或两个可选字典参数作为代码执行的全局名称空间和局部名称空间。

  eval 的用法最严格的限制(注意对 builtins 的处理)是:

eval(user_func,{"__builtins__":None},{"x":x,"sin":sin})

  如果希望允许使用某些变量和函数,可以采用下面的方法:

eval(user_func,{"__builtins__":None},{"x":x,"sin":sin})

  有关使用 exec 和 eval 的注意事项,文章 Be careful with exec and eval in Python 进行了细致的讨论。首次编译是不可避免的,使用预编译后重复使用可以提高效率。另外使用局部空间因此可以加快变量的查询速度,所以执行会快。

  下面还有几个需要注意的地方:

  能避免使用的时候,还是应该采用其他方式,比如转换字符串的时候,使用 int() 而不是 eval(),因为如果转换的这个字符串是用户输入的,危险的情况是 eval() 会执行恶意输入的条命令。详细的解释参考:Python之eval()函数的危险

  尽量避免使用 eval 来获取变量名,想要实现动态变量名,使用 globals(),locals() 以及 vars()。

a = 123 
s1 = locals()['a'] 
s2 = vars()['a'] 
print s1, s2

  类似的情况也出现在 JSON 格式的解析上,参见 Running JSON through Python's eval()?

0
Posted on 21:24:00 by Unknown and filed under ,

  ReadTxT 是基于 Google App Engine 编写的阅读网络小说的工具,初衷是为了使阅读网络小说更方便而设计的。它支持常见的网络文学站点,比如:起点中文网、纵横中文网、飞库电子书等。用户可以在登录后统一管理各个站点自己喜欢的书目,并保存阅读书签,实现一站式阅读。主要的特点有:

  • 支持多个主流小说网站。
  • 自动抓取最新的章节。
  • 无广告。
  • 支持手机阅读,并针对 iPhone 优化。
  • 提供下载和订阅功能。

  项目主页:http://code.google.com/p/bookreader/

  部署需要对 Google App Engine 有一点点了解,如果只是希望使用,可以直接进入:

  可以保证上述部署的应用是最新版本,除非调整数据库结构,书签信息不会清空(有的时候清空了数据...请不要怪我)。 需要补充说明的是,本人不负责使用代码或者应用本身所带来的网络小说版权问题。

0
Posted on 23:03:00 by Unknown and filed under

  我用 iPhone4,号码是联通的186号段。出问题时候的症状是只能收不能发,无法调出设置中的"蜂窝数据网络"。彩信在手机上未显示发送异常,那些未成功送达的彩信也没出现在账单上。

  一句话解决:应该是联通自身的问题,过一天就好了。

  下面是折腾记录,谨献给我浪费的时间。

  1. 能不能发彩信和是否越狱无关。
  2. 联通网络已经设置好了 APN 信息,所以苹果觉得没必要显示出来。如果是移动用户,可能需要设置 APN,这个是由手机系统里面的 /System/Library/Carrier Bundles/ 决定的。
  3. 针对2,如果没有"蜂窝数据网络"的设置,就别折腾了,折腾出来你会发现内置的数据也是对的。
  4. 我觉得没用的所谓技巧:拔卡再插卡;电话号码去掉+86。
  5. 可能有影响,我不确认的设置:"短信"设置是否带主题,彩信是否写文字。(能发我就没管了,懒得试,一条0.9元)

  可能有用的链接,不同系统、不同运营商不一样,仅供参考:

0
Posted on 07:58:00 by Unknown and filed under ,

  家里一个 iPad 开机花屏,出现一条条的彩道,无法操作,于是拿去维修了。

  1. 在官方网站预约 Genius Bar,恰好有人取消预约,选择了一个中午的时间。
  2. 到了苹果店确认了预约,然后等待。只带了机器,没带括发票、充电器、数据线。
  3. 准时开始,负责接待的是一个漂亮姑娘,记得名字是 Endless。
  4. 先问我是不是破解了,我说没有。问我是否摔了,我说没有。问我是否进水了,我说没有。我说就是放着就坏了。
  5. 问我是否有重要资料,我说没有,然后连电脑重置,过程正常,但是问题依旧。
  6. 判断是内部硬件问题。(虽然我早知道...我觉得是屏线问题)
  7. 给我换了一台,我打开后是4.2.1版本,外观有一点点无关紧要的瑕疵。
  8. 再次更换了一台,系统是3.2.2。
  9. 签字,说保修3个月,但是我本身质保也是3个月后过期。
0
Posted on 19:04:00 by Unknown and filed under

  这个,买了京东上最便宜的一个手写板...

  对于这样一个价位的压力板,能用就行了,反正不是我用...本文用它书写,累死我了!

0
Posted on 01:12:00 by Unknown and filed under

  关心我的人总会提醒我要生活规律,嗯,是的。

  Google Reader 提供近30天的阅读统计,黄色的柱形表示那个时间点阅读的条目数。

  凌晨1点到2点是阅读最多的时刻,我倒是奇怪早上7点怎么也会那么多。下午时间基本都在老实干活,所以没有阅读数目。晚上五点有个小高峰,是因为要吃饭了吗...?晚上8点到12点通常在电脑前,但是一般都会有别的事情,直到凌晨。

  数据统计如下:

From your 129 subscriptions, over the last 30 days you read 6,297 items, clicked 267 items, starred 0 items, shared 8 items, and emailed 0 items. Since December 23, 2006 you have read a total of 248,289 items.

  我记得2007年初的时候,利用 Google 搜索记录统计了我各个时刻搜索的次数,也有按小时统计的结果:

  这个…似乎说明我这几年没什么长进。凌晨三点是我的黄金时间啊。早上九点到十二点估计不是睡觉就是吃饭。下午六点也是吃饭吧。嗯…规律生活规律生活。