【发布时间】:2012-09-07 13:18:49
【问题描述】:
我已经创建了(使用a script 和一些来自 Stack 的帮助和一些来自朋友的帮助;我对 PHP 知之甚少)一个简单的页面,供当地非营利出版物使用,人们可以在其中上传照片。
我不擅长安全(出于无知,而不是故意疏忽),但我已采取以下步骤来保护此页面:
• PHP 脚本设置为仅接受 .jpg、.png 和 .tif 文件进行上传;
• 保存表单内容的子文件夹权限设置为700,保存上传照片的子文件夹权限设置为700;
• 根据文档,我的主机具有以下配置,以确保只有 .php 文件作为 .php 运行:
<FilesMatch \.php$>
SetHandler php52-fcgi
</FilesMatch>
• 我已将 .htaccess 文件放在相关(主要和保存的内容)文件夹中:
RemoveHandler .php
RemoveHandler .inc
RemoveHandler .pl
RemoveHandler .cgi
RemoveHandler .py
RemoveHandler .fcgi
然而,一夜之间,有人找到了这个测试页面,并提交了一个看似完美无害的测试消息和小 .jpg。这是一个私人测试页面,其 URL 不直观,只有我和其他三个人知道;其他人都没有发送此测试。
这显然让我担心会发生一些奇怪的事情,而且我担心我对安全性的了解不够,无法确保此页面的安全。
我有什么明显的遗漏吗?
【问题讨论】:
-
用户提供的文件名(
$_FILES['upload']['name'])不可信,很容易更改。不要检查这些扩展。如果检查getimagesize()是否返回有效结果,请检查 mime 类型。如果可能,生成您自己的文件名。