用 nginx 对文件服务器鉴权

标签:nginx

最近项目中遇到一个需求:
用户在使用 seafile 上传文件,希望将其分享出去。
seafile 自己生成的分享链接类似于 https://seafile.xxx.com/f/23cc6812408e44f8b63e/,若未过期且密码正确时会将其重定向到类似 http://seafile.yizhisec.com/seafhttp/files/e1687864-8a12-46db-9708-b4240df346be/1.txt 的地址。
产品希望能对这个分享链接进行鉴权,并且最好不暴露实际的文件地址和避免发起重定向的请求。

关于 XSS 防范的一些思考

标签:HTML, JavaScript

最近在看一些 web 安全相关的文章,大部分都有系统和完善的解决方案,然而 XSS(Cross-site scripting)攻击相关的资料却很杂乱,甚至连 HTML 实体转义能解决哪些地方的 XSS 攻击都说不清。
于是在翻了一堆资料后,觉得还是把自己对它的一些思考记录下来吧。

折腾了一下 nginx 配置

标签:nginx

过年休息闲得无聊,而我的 VPS 很凑巧地挂了,于是这两天就忙着配置新的 VPS 了。
其实上面就三个东西:我的博客、Shadowsocks 和 Dropbox(用来备份 Redis 数据文件),所以很快就恢复了。

顺便检讨一下,其实去年 7 月就因为 GAE 停止对 Master/Slave 类型的应用支持,而花了几天时间把博客重写了,让它能跑在 Linux 上了。拖延了 2 年最后还是得靠 deadline…
不过一直没空整理代码,所以现在还没开源,希望能有下一个 deadline 吧。

不过本文并不是聊 Doodle 2 的开发经验,而只是记录一些折腾 nginx 配置的收获。

与安全相关的 HTTP 头

标签:无

由于 Web 安全问题越来越严重,各种浏览器都加强了安全策略,也引入了很多新的 HTTP 头。最近在做读读日报的扫码登录时,就被这些玩意折腾了一天,于是记录在此。

兼容 iOS 9 Safari 的应用跳转方案探索

标签:无

很多做 web 开发的一定遇到过这种需求:点一个链接或按钮时,如果装了应用,就用该应用打开;没装的时候,iOS 跳 App Store 下载,Android 直接下载 apk 包。
在做读读日报的时候,就被这玩意花费了好长时间;然而 iOS 9 发布后,方案又失效了,于是又折腾了我几个小时。

生产环境下如何优雅地重启 Tornado

标签:Python

之前我在《Tornado 使用经验》一文中,提到了调用 tornado.process.fork_processes() 来提高性能的方法。
在最近的实践中,我发现这样会有些弊端,所以便有了本文。
当然,这些仍然只是我个人的探索而已,并不保证是最佳实践。

Tornado 使用经验

标签:Python

最近在做一个网站的后端开发。因为初期只有我一个人做,所以技术选择上很自由。在 web 服务器上我选择了 Tornado。虽然曾经也读过它的源码,并做过一些小的 demo,但毕竟这是第一次在工作中使用,难免又发现了一些值得分享的东西。

为什么遵循W3C标准极其重要?

标签:JavaScript

公司里一个IE only的项目里遇到个bug,有的测试人员遇到了,而作为开发人员的我却没遇到。我查了1天也没找出原因,倒是发现其中混杂着各种风格的代码。
以根据id获取DOM元素为例,我就找到4种方式:
  1. document.getElementById(elementId):W3C标准。
  2. document.all[elementId]或document.all.elementId:这个方法会返回id或name为elementId的元素(或元素数组)。IE、Chrome和Opera支持,Firefox不支持。
  3. window[elementId]或window.elementId:DOM元素会根据其id生成一个全局变量。IE、Chrome和Opera支持,Firefox不支持。
  4. eval(elementId, window):同上。IE、Chrome和Opera支持,Firefox不支持。

为视网膜显示屏优化网页上的图片

标签:HTML, JavaScript, iPhone, CSS

说起iPhone 4带来的革新,retina display绝对是最吸引眼球的一项,以至于我现在看电脑的显示屏时,都能看到满屏幕的像素点了⋯

正是依赖这视网膜显示屏,iPhone 4的分辨率达到了640×960 pixels;不过为了保持向下兼容性,它采用的仍然是320×480 points。
也就是说,在不进行缩放的情况下,显示普通图片时,它会用4个像素来显示图片中的1个像素;而在显示retina图片时,每个像素都对应图片中的1个像素。
如此一来,老的应用无需修改就可以在iPhone 4上运行了——虽然显示效果差了点,但是不会出现只有左上角那1/4的区域有内容的情况。

在用iOS SDK开发iOS应用时,只要将图片名加上“@2x”后缀,就能让支持retina display的设备自动显示这个解析度更高的图片。
但Safari等使用UIWebView的应用在展示图片时,却无法利用这个特性,因为这样可能会造成大量没必要的HTTP请求。
既然不能自动实现,那就只能手动来弄了。原理很简单,准备2种图片,当检测到支持retina display时,就显示大图,然后把图像的长宽各缩小一半即可。

对微博的一些思考

标签:无

在我看来,互联网迄今为止的几个里程碑是电子邮件、门户网站、搜索引擎、论坛、博客和微博。
从时间轴上来看,互联网的本意就是为了传递信息;可在漫长的时期里,它却一直局限于小范围或单方面的传播;而如今,越来越多的网民主动参与了进来,想要相互交流的意愿,促进了社交网络——特别是微博的流行。
由此可见,微博的主要任务就是促进人们的相互交流,让人们自由地分享和探讨自己的观念。

这一年来,我先后尝试了3款微博:Twitter、Google Buzz和新浪微博,虽然使用不多,但也抱有不少看法。

« 看看还有什么好玩意