关闭

lighttpd 的 flv 流媒体(含有防盗链功能)

标签: lighttpdflv服务器javascriptyoutubehex
4086人阅读 评论(2) 收藏 举报
分类:
原贴:http://blog.guoshuang.com/showlog.asp?cat_id=33&log_id=5692

lighttpd 的 flv 流媒体

本文打分:0 [2007-9-13]
下文很棒,收获不浅,lighttdp 可以在服务器端打开 mod_flv_streaming 从而更好的支持 flv 站点。怪不得 youtube 使用 lighttpd,我没办法测试,不知效果到底怎样。mod_secdownload 构造复杂的地址从而防止盗链。

以下为引用内容:

下载站是一类特殊的站点,站长们已经不需要为流量担心了。他们只需要担心服务器的负载了。尤其是现在迅雷等近乎掠压者的软件出现以后。
lighttpd是近来日渐流行的一个轻量级,着眼于高负载性能的开源的,免费的web服务器软件。在很多方面比如mod_rewrite方面与行业巨头apache很相似,
使得从apache往lighttpd上的迁移成本相对较低。
但是个人感觉,lighttpd还是着眼于高负载载上并不失灵活性。例如为了迎合日渐流行的在线视频站点如youtube类站点的胃口,还专门出一个针对flv下载的模块,
这个模块相当偏门。
lighttpd上还有一个专门针对下载站点的模块:mod_secdownload
根据其官方wiki文档,mod_secdownload有四个配置选项:

1. secdownload.secret = <string>
2. secdownload.document-root = <string>
3. secdownload.uri-prefix = <string> (default: /)
4. secdownload.timeout = <short> (default: 60 seconds)

在这个模块出现以前,人们也曾有几个思路去应对盗链:
1. 修改WEB应用。比如直接通过PHP读取文件内容,发送二进制码。由于发送过程完全可控,这个对访问者的控制完全准确,比如想限制只有登陆用户才可以下载 等等,易如反掌。问题是,每一次下载都通过php进行,严重地影响了服务器的效率。磁盘IO,CPU占用都容易跑满。
2.编程实施,自行设计一些 服务器模块。比如weidy同学以前好像做过IIS下的过滤器,思路是在IIS中通过插入Hook,检测对静态下载文件 (zip,exe,rar等文件的HTTP请求头中是否存在一个特定的Cookie,而这个cookie是有有效期的。当然这是可以的,我还有更好的思 路,那就是,自己写一个web server,你想干什么就干什么,你要加一个彩蛋以便每当有用户访问时都要你站长大人先按一下电话按键用户才可以继续下载都行…..问题是,不是所有人 都会。而且,实施也是一大麻烦。
3.基于服务器的现有模块,依照某些访问特性,比如来源页面(HTTP_REFERER)进行限制。但是,现在的 盗链网页已经非常聪明了,迅雷更聪明:它能精确地学习前人在下载该软件时的数据,模仿性地发送特定的HTTP_REFERER(说不定将来连COOKIE 也一起发送),非常牛B.所以像车东简单地这样写上:

1. RewriteEngine on
2. RewriteCond %{HTTP_REFERER} !^http://(www/.)?niernier/.com/.*$ [NC]
3. RewriteRule /.(mp3|rar)$ http://www.niernier.com/archives/000445.html [R=301,L]
4. #RewriteLog "logs/rewrite.log"
5. #RewriteLogLevel 3

已经没用了,当然用这个防止通过baidu搜mp3还是可以的,对迅雷,没用。某些牛X的网站好像也能突破这种简单的防盗链。

好了,现在看看light官方网站给出的办法:
首先,某些东西是一定要经常改变的.或者是Cookie,或者是URI,等等。而URI是最好操作的。
另外,URI中一定要有一个加密性的东西,在secdownload中,secdownload.secret选项就是让站长自行设置的一个密串。(当然这个密串要足够保密>>>)

然后,我们用PHP来生成软件下载链接:

1. <?php
2.
3. $secret = "verysecret";
4. $uri_prefix = "/dl/";
5.
6. # filename
7. $f = "/secret-file.txt";
8.
9. # current timestamp
10. $t = time();
11.
12. $t_hex = sprintf("%08x", $t);
13. $m = md5($secret.$f.$t_hex);
14.
15. # generate link
16. printf('<a href="%s%s/%s%s">%s</a>',
17. $uri_prefix, $m, $t_hex, $f, $f);
18. ?>

看 到了吗?这个新的链接包含了md5后的密钥(“verysecret”,在lighttpd.conf中指出),同时包含了时间特征串。这个时间串与文件 名,密钥一起参与了md5计算,以便对下载客户端提交的URI进行校验。如果不把时间放进去md5,客户端便可以假造URI,任意修改时间串。
还是把官方给的lighttpd.conf中的相关配置也给出:

1. server.modules = ( ..., "mod_secdownload", ... )
2.
3. secdownload.secret = "verysecret"
4. secdownload.document-root = "/home/www/servers/download-area/"
5. secdownload.uri-prefix = "/dl/"
6. secdownload.timeout = 120

现在,把你所有的页面的链接改成用这个php操作运算过的新地址吧。这个新地址被正确地被lighttpd解码并进行传送。
有趣的是,如果访问的URL已经超时失效,lighttpd送出的头是“408 Request Timeout” ,这不是一个标准的HTTP协议头,这是为了欺骗一下客户端。

当然,没有什么能永远防止疯狂下载。更妥善一点的情况是,这个下载地址并不是在html中直接给出,而是通过javascript来写出。即便是这样,如果hacker们
愿意,他也可以让一个firefox在后端访问该页并解析javascript最后遍历dom节点…. 得到该地址。你的地址每2分钟就超时,他也可以每2分钟来造访一次,拿到新地址。但是 有几个网站能够得到这种级别的高手的青睐呢?

 
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:3124657次
    • 积分:32866
    • 等级:
    • 排名:第145名
    • 原创:76篇
    • 转载:1209篇
    • 译文:0篇
    • 评论:200条
    最新评论
    牛逼的网站