热门关键字:   网站安全  黑客攻防  安全漏洞  系统安全  网络安全
站外
广告
域名申请虚拟主机 信息安全 域名注册 云主机 网络安全技术 企业网络安全 站外
广告
文字广告位招租 文字广告位招租 文字广告位招租 文字广告位招租 云安全

如何构建安全的php下载组件

发布时间:2010-08-18 13:58文章来源:网络文章作者:Juliet NaNa 点击次数:
摘要:*这篇文章只是一篇技术随笔 这个组件的构建思路是:按照梁子恩的方法我对文档下载组件的下载类型做了限制,使用switch( $ext )设定只允许特定类型文档下载。虽然文档不能被非法下载,但是文档名一旦修改为错误的,php就会回显,目的一是不能下载敏感文件,二...

*这篇文章只是一篇技术随笔

这个组件的构建思路是:按照梁子恩的方法我对文档下载组件的下载类型做了限制,使用switch( $ext )设定只允许特定类型文档下载。虽然文档不能被非法下载,但是文档名一旦修改为错误的,php就会回显,目的一是不能下载敏感文件,二是不能不能因为执行错误暴露敏感信息。

首先对组件设定默认路径。设置路径后,获得文件名,这样的话如果没有找到文件,系统会回显:

Warning: filesize() [function.filesize]: stat failed for /home/XX/docs/14.rar"or"1"="1 in /home/XX/get_doc.php on line 5

处理这个问题,只要将$file_size = @filesize($file_path);这样写就不会把把物理路径反馈回去

另外一部分核心代码是:

if( $filename == "" ) {
如果没有输入文件名,回显没有输入文档名
elseif ( ! file_exists( $filename ) ) {
如果没找到,则回显没找到
然后正则匹配:switch( $ext ){

这则匹配这样匹配:

case "pdf": $ctype="application/pdf"; break;
case "zip": $ctype="application/zip"; break;
case "rar": $ctype="application/rar"; break;
case "doc": $ctype="application/msword"; break;
case "doc": $ctype="application/octet-stream"; break;
case "xls": $ctype="application/vnd.ms-excel"; break;
case "ppt": $ctype="application/vnd.ms-powerpoint"; break;
case "wmv": $ctype="video/x-ms-wmv"; break;
case "gif": $ctype="image/gif"; break;
case "png": $ctype="image/png"; break;
case "jpg": $ctype="image/jpeg"; break;
case "jpeg": $ctype="image/jpeg"; break;
case ".ai": $ctype="application/postscript"; break;
case "swf": $ctype="application/x-shockwave-flash"; break;

否则全部显示:不允许下载的类型

这样只要让下载组件get取值即可。当然,也可以用数据库的id编码取路径。不过我觉得那样对图片不太好处理,这个可以取到图片变量后转到图片页自动显示图片,变量要这样实现好麻烦的说。
 

标签分类: PHP

上一篇:在Windows下写PHP的C扩展
下一篇:常用的PHP正则表达式