dec*_*eze 33
首先,要意识到上传文件意味着用户以各种格式提供大量数据,并且用户可以完全控制该数据.这甚至是普通表单文本字段的问题,文件上传是相同的,还有更多.第一条规则是:不要相信任何一条.
您通过文件上传从用户获得的内容:
这些是文件上载的三个主要组件,并且它们都不可信任.
不要相信MIME类型$_FILES['file']['type'].这是一个完全随意的用户提供的价值.
不要将文件名用于任何重要的事情.这是一个完全随意的用户提供的价值.您不能信任文件扩展名或一般名称.不要使用类似的东西将文件保存到服务器的硬盘上'dir/' . $_FILES['file']['name'].如果名称是'../../../passwd',您将覆盖其他目录中的文件.始终自己生成一个随机名称以将文件另存为.如果需要,可以将原始文件名作为元数据存储在数据库中.
永远不要让任何人或任何人随意访问该文件.例如,如果攻击者将malicious.php文件上传到您的服务器并且您将其存储在站点的webroot目录中,则用户可以直接example.com/uploads/malicious.php执行该文件并在您的服务器上运行任意PHP代码.
切勿将任意上传的文件存储在任何地方,始终将它们存储在只有您的应用程序可以访问它们的地方.
仅允许特定进程访问文件.如果它应该是图像文件,则只允许读取图像的脚本并调整它们的大小以直接访问文件.如果此脚本在读取文件时遇到问题,则可能不是图像文件,标记它和/或丢弃它.其他文件类型也是如此.如果该文件应该可由其他用户下载,请创建一个脚本,为该文件提供下载服务,并且不对其进行任何其他操作.
如果您不知道要处理的文件类型,请自行检测文件的MIME类型和/或尝试让特定进程打开文件(例如,让图像调整大小的过程尝试调整所谓的图像大小).此处也要小心,如果该进程存在漏洞,则恶意制作的文件可能会利用它,这可能导致安全漏洞(此类攻击最常见的例子是Adobe的PDF阅读器).
解决您的具体问题:
[T] o检查这些图像的大小我必须将它们存储在我的/ tmp文件夹中.风险不大吗?
不.如果您没有对该数据执行任何操作,仅将数据存储在临时文件夹中的文件中并不存在风险.数据只是数据,无论其内容如何.如果你正在尝试执行数据,或者程序正在解析数据,如果程序包含解析缺陷,可能会被恶意数据欺骗做出意想不到的事情,那么这样做是有风险的.
当然,在磁盘上放置任何类型的恶意数据比在任何地方都没有恶意数据更危险.你永远不会知道谁会来,并用它做点什么.因此,如果未通过验证,您应该验证所有上传的数据并尽快将其丢弃.
如果一个恶作剧者给了我一个网址并且我最终下载了一个充满恶意软件的整个网站怎么办?
这取决于你下载的具体内容.一个URL最多会产生一个数据块.如果您正在解析该数据,并且正在根据您的问题初始blob下载更多URL的内容.不要这样做.但即使你这样做了,那么你还有一个充满东西的临时目录.再说一次,如果你没有对那些东西做任何危险,这并不危险.
1个简单的场景是:如果您使用上传界面,对上传文件的类型没有限制,则攻击者可以上传带有恶意代码的PHP或.NET文件,从而导致服务器泄露.
参考:http: //www.acunetix.com/websitesecurity/upload-forms-threat.htm 以上链接讨论常见问题
也请参考:http: //php.net/manual/en/features.file-upload.php
| 归档时间: |
|
| 查看次数: |
2755 次 |
| 最近记录: |