我工作的公司最近在我们托管的网站上遭受了许多标头注入和文件上传漏洞攻击,虽然我们已经解决了标头注入攻击的问题,但我们尚未控制上传漏洞。
我正在尝试设置一系列即插即用类型的上传脚本以供内部使用,设计人员可以将其复制到其网站的结构中,修改一些变量,并在其上准备好上传表单他们的网站。我们希望尽可能地限制我们的暴露(我们已经关闭了 fopen 和 shell 命令)。
我在过去一个小时内搜索了该网站,发现了许多不同的答案,这些答案涉及依赖于外部资源的特定方法。你们都认为什么是最好的纯脚本解决方案,足够具体,可以用作可靠的保护方法?另外,如果可能的话,我希望将语言限制为 PHP 或伪代码。
Edit:我找到了我的答案(发布在下面),虽然它确实使用了 shell 命令 exec(),但如果您阻止上传脚本文件(这个解决方案做得很好),您不会遇到任何问题。
仅允许授权用户上传文件。您还可以添加验证码来阻止原始机器人。
-
首先,set the MAX_FILE_SIZE
在您的上传表单中,并设置最大文件数size
and count
在服务器上以及。
ini_set('post_max_size', '40M'); //or bigger by multiple files
ini_set('upload_max_filesize', '40M');
ini_set('max_file_uploads', 10);
通过上传的文件进行大小检查:
if ($fileInput['size'] > $sizeLimit)
; //handle size error here
-
你应该use $_FILES
and move_uploaded_file() https://stackoverflow.com/questions/16276835/php-move-uploaded-file-why-is-it-important将您上传的文件放入正确的目录,或者如果您想处理它,请检查is_uploaded_file()
。 (这些功能的存在是为了防止文件名注入引起的register_globals
.)
$uploadStoragePath = '/file_storage';
$fileInput = $_FILES['image'];
if ($fileInput['error'] != UPLOAD_ERR_OK)
; //handle upload error here, see http://php.net/manual/en/features.file-upload.errors.php
//size check here
$temporaryName = $fileInput['tmp_name'];
$extension = pathinfo($fileInput['name'], PATHINFO_EXTENSION);
//mime check, chmod, etc. here
$name = bin2hex(mcrypt_create_iv(32, MCRYPT_DEV_URANDOM)); //true random id
move_uploaded_file($temporaryName, $uploadStoragePath.'/'.$name.'.'.$extension);
Always 生成一个随机 ID 而不是使用原始文件名.
创建一个new 子域例如http://static.example.com http://static.example.com
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)