`
pypy
  • 浏览: 92516 次
  • 性别: 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-1.4.18

    lighttpd-1.4.18是lighttpd的一个稳定版本,它在前一版本的基础上进行了多项优化和改进。这个版本的主要特点是: 1. **高性能**:lighttpd采用了高效的多线程模型,能够有效地处理高并发请求,尤其适合动态内容较少...

    最新lighttpd源码 lighttpd-1.4.22

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

    lighttpd1.4.25代码

    总的来说,lighttpd1.4.25的源码是一个宝贵的教育资源,对于想要理解Web服务器工作原理,或者希望定制自己的服务器软件的开发者来说,它提供了一个极好的学习平台。通过对源码的阅读和实践,我们可以更深入地理解...

    lighttpd-1.4.45_lighttpd服务器_

    lighttpd-1.4.45是lighttpd服务器的一个重要版本,它以其小巧、安全的特性,为开发者和嵌入式平台提供了一种高效的服务选择。 lighttpd,顾名思义,强调的是“轻”——轻量级、低资源消耗。它的设计目标是提供一个...

    搭建lighttpd+cgi的代码包

    本教程将详细介绍如何使用lighttpd和CGI来搭建一个动态网页服务器。 1. **理解lighttpd** lighttpd是一个快速、安全且配置简单的HTTP服务器,特别适合于资源有限的环境。它的特性包括模块化设计、高性能的事件模型...

    lighttpd配置和启动脚本

    1. **启动脚本**:通常是一个名为`start-lighttpd.sh`的bash脚本,内容可能包含检查lighttpd是否已运行、设置工作环境变量、执行`lighttpd -f /path/to/lighttpd.conf`启动命令等步骤。 2. **停止脚本**:类似地,`...

    lighttpd+php in android

    1. **编译lighttpd**:首先,你需要获取lighttpd的源代码,并确保你有一个合适的交叉编译环境,以便在Android设备上编译。这可能涉及到安装NDK(Android Native Development Kit),设置交叉编译工具链,并对...

    Lighttpd源码分析_mobi

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

    lighttpd分析

    这些多路复用技术允许lighttpd在一个进程内部同时监视多个文件描述符,当有可读写事件发生时,能快速响应,从而提高了服务器的响应速度和吞吐量。 总的来说,lighttpd的多进程模型结合多路复用技术,为服务器提供了...

    ubuntu lighttpd实现websocket

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

    Lighttpd源码分析

    Lighttpd是一个轻量级的Web服务器,它在性能和资源使用上表现出色,被广泛应用于需要高性能、低资源占用的场景中。对于从事网络编程和服务器开发的专业人士来说,源码分析是一个深入了解和优化服务器行为、提升性能...

    lighttpd-1.4.49.tar.gz

    4. **安全性**:lighttpd提供了多种安全策略,如URL重写、访问控制、防盗链等,以保护服务器免受攻击。 配置lighttpd涉及以下几个核心步骤: 1. **安装前准备**:确保系统已安装编译工具和依赖库,如gcc、make、...

    lighttpd代码阅读资料

    总之,lighttpd的代码阅读是一个既挑战又富有成就感的过程。通过对源码的深入探索,开发者不仅能掌握lighttpd的工作机制,还能提升自己的编程技能和解决问题的能力。在实践中不断学习和积累,是成为一名优秀的...

    ARM平台lighttpd服务器

    ARM平台的lighttpd服务器就是这样一个解决方案,尤其适用于嵌入式设备和资源有限的环境。本文将深入探讨lighttpd服务器在ARM架构上的应用及其特点。 首先,我们要了解什么是lighttpd。Lighttpd是一款开源的、高...

    lighttpd-1.4.20源代码

    每个模块都是一个单独的`.c`文件,如`mod_access.c`、`mod_rewrite.c`等,它们通过lighttpd的模块接口注册和执行各自的功能。 6. **内存管理** lighttpd在内存管理上注重效率和安全性,`lighttpd-1.4.20/src/...

    varnish+lighttpd配置

    Varnish和Lighttpd是两个非常重要...通过Varnish和Lighttpd的组合,你可以构建一个高效、灵活的Web服务器环境,有效提升网站的性能和用户体验。记住,配置过程中需要根据实际情况调整参数和策略,确保最佳的运行效果。

    Lighttpd源码分析.zip

    总的来说,Lighttpd源码分析是一项既有挑战性又有价值的任务,它为我们提供了一个深入理解HTTP服务器和网络编程的窗口。通过深入研究,我们可以提升自己的技术素养,为未来的项目开发打下坚实的基础。

    lighttpd-1.4.20-cmake

    2. **解压源代码**:使用`tar -zxvf lighttpd-1.4.20.tar.gz`命令进行解压,这将创建一个名为`lighttpd-1.4.20`的目录,里面包含了所有的源代码和相关文档。 3. **初始化CMake**:进入解压后的目录,运行`cmake .`...

Global site tag (gtag.js) - Google Analytics