`
pypy
  • 浏览: 90478 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

lighttpd防盗链技术的一个变形

阅读更多
lighttpd 中的mod_secure_download.c模块中的防盗链技术大家已经很清楚了,但是这个模块要求会改写一些url的地址,形如:
The generated URL has to have the format:

<uri-prefix>/<token>/<timestamp-in-hex>/<rel-path> which looks like "yourserver.com/bf32df9cdb54894b22e09d0ed87326fc/435cc8cc/secure.tar.gz"

<token> is an MD5 of

   1. a secret string (user supplied)
   2. (rel-path)(starts with /)
   3. (timestamp-in-hex)


具体参考:http://trac.lighttpd.net/trac/wiki/Docs%3AModSecDownload
如果有这样的需求,要求不改变原来的下载url,而做到对某些资源进行防盗链呢?
最后我们可以这样做,增加get方法,即是把加密过的部分通过get方法传递给lighttpd的mod_secure_download.c模块
例如,
原来的url: yourserver.com/secure/secure.tar.gz
新的url:yourserver.com/secure/secure.tar.gz?credentials=fhsfhskfaskfhsakfsk2343askfskfsk
这样,我们就做到在不改变原来url的情况下又可以用到mod_secure_download.c模块的防盗链功能
下面要修改mod_secure_download.c模块的源代码,其实很简单,只要熟悉lighttpd的一些常见插件就可以在几分钟内搞定这个功能
/* 
* if there is a credentials = md5,
* otherwise sent 403 
* */
if (NULL != (get_param = (data_string *)array_get_element(p->get_params, "credentials"))) {
    /* too short */
    if (get_param->value->used < 2) {
        con->http_status = 403;
        return HANDLER_FINISHED;
    }

    md5_str = get_param->value->ptr;

/* check if it is a md5 string */
if ( strlen(md5_str) != 40 || !is_hex_len(md5_str, 40) ) {
    con->http_status = 403;
    log_error_write(srv, __FILE__, __LINE__, "ss", "credentials-md5 invalid:", md5_str);

    return HANDLER_FINISHED;
    }
}
else{
    con->http_status = 403;

    return HANDLER_FINISHED;   
}


上面的代码就是通过get方法获得加密的字符串,然后下面的代码就是原来lighttpd中的防盗链出来流程
lighttpd的这个加密模块,我个人认为还是有点需要改进的地方
大家也看出来了,对于防盗链,这里采用的是md5单向加密的技术,但是client端向服务器发送的请求加密串是包含时间的(也正是这个时间才是我们用于判断这个url的有效时间,从而达到防盗链的目的),个人觉得可以对明文传输的时间进行一下简单的加密(当然要是可以双向的加密)
还有一点需要注意的地方,就是这个防盗链模块在lighttpd的配置文件中的lighttpd.conf加载顺序是很重要的,
一定要将这个防盗链模块放在mod_flv_streaming.c/mod_h264_streaming.c模块加载之前加载

server.modules = ( ..., "mod_secdownload",
    "mod_flv_streaming",
    "mod_h264_streaming",
 ... )


否则,防盗链模块会不起作用的,因为flv/h264这些模块里面会有

con->file_finished = 1;
return HANDLER_FINISHED;



注:该文章之前发布在http://www.hiadmin.com/lighttpd防盗链技术的一个变形/
0
0
分享到:
评论

相关推荐

    最新lighttpd源码 lighttpd-1.4.22

    Lighttpd是一个德国人领导的开源软件,其根本的目的是提供一个专门针对高性能网站,安全、快速、兼容性好并且灵活的web server环境。具有非常低的内存开销,cpu占用率低,效能好,以及丰富的模块等特点。lighttpd是...

    Lighttpd源码分析_mobi

    主要内容包括:lighttpd介绍与分析准备工作、lighttpd网络服务主模型、lighttpd数据结构、伸展树、日志系统、文件状态缓存器、配置信息加载、i/o多路复用技术模型、插件链、网络请求服务响应流程、请求响应数据快速...

    Lighttpd源码分析

    Lighttpd源码分析就是一本介绍分析Lighttpd源码的初级读本,其主要目标在于:一方面让已经接触过网络编程的读者可以从Lighttpd这个开源项目中学习到更深入实际的网络编程知识,另一方面也可以让使用Lighttpd作为自己...

    用于ROR应用的lighttpd配置模板

    里面包含了lighttpd启动程序,lighttpd配置模板以及一个控制lighttpd启动和关闭的脚本。

    lighttpd-1.4.20.tar

    lighttpd-1.4.20.tar lighttpd-1.4.20.tar

    lighttpd源码

    Lighttpd 是一个德国人领导的开源Web服务器软件,其根本的目的是提供一个专门针对高性能网站,安全、快速、兼容性好并且灵活的web server环境。具有非常低的内存开销、cpu占用率低、效能好以及丰富的模块等特点。 ...

    lighttpd 主工作模式

    lighttpd 流程分析工作模式,帮助理解lighttpd

    varnish+lighttpd配置

    varnish+lighttpd配置

    lighttpd完全学习

    lighttpd完全学习,适合新手文档参考,ppt文件

    Lighttpd 的windows版本

    Lighttpd 的windows版本 Lighttpd 1.4.35 发布了,该版本包含很多 bug 修复,包括 scan.coverity.com 扫描的问题。但最主要的是一个 SQL 注入(和路径遍历)问题:

    ubuntu lighttpd实现websocket

    如何在ubuntu上实现lighttpd 1、下载mongoose使用mongoose中的example中的websocket_chat,实现websocket 2、websocket_chat源码下载路径 官网:https://cesanta.com 论坛:...

    lighttpd-1.4.26 源码

    lighttpd-1.4.26 源码,官方直接下载,学习的好资源。

    最新lighttpd-1.4.28源码下载

    最新lighttpd-1.4.28源码下载最新lighttpd-1.4.28源码下载最新lighttpd-1.4.28源码下载最新lighttpd-1.4.28源码下载最新lighttpd-1.4.28源码下载最新lighttpd-1.4.28源码下载

    lighttpd fastcgi

    1.修改lighttpd.conf 修改为自己的工作目录 var.server_root = "/home/caoft/lighttpd/lighttpd_websocket_fastcgi/http_server" var.state_dir = "/home/caoft/lighttpd/lighttpd_websocket_fastcgi/http_server"...

    lighttpd代码阅读资料

    lighttpd代码阅读资料 参数的 web服务器

    lighttpd-1.4.20-cmake

    lighttpd-1.4.20-cmake

    lighttpd-1.4.45_lighttpd服务器_

    lighttpd轻量级web嵌入式服务器,方便嵌入式平台移植,小巧安全

    lighttpd-1.4.20源代码

    lighttpd-1.4.20源代码

    lighttpd配置和启动脚本

    包括lighttpd.conf配置文件以及用于控制web server启动和停止的脚本。

    lighttpd-1.4.59.tar.gz

    lighttpd安装包

Global site tag (gtag.js) - Google Analytics