我工作的公司最近在我们托管的网站上遇到了许多标头注入和文件上传攻击,虽然我们已经修复了关于标头注入攻击的问题,但我们尚未控制上传漏洞.
我正在尝试设置一个即插即用型的上传脚本系列,以便内部使用,设计人员可以将其复制到他们的网站结构中,修改一些变量,并有一个随时可用的上传表单.他们的网站.我们希望尽可能地限制我们的曝光(我们已经关闭了fopen和shell命令).
我在网站上搜索了最后一小时,发现许多不同的答案处理依赖外部资源的特定方法.您认为什么是最好的仅限脚本的解决方案,具体到足以用作可靠的保护方法?另外,如果可能的话,我想将语言限制为PHP或伪代码.
编辑:我找到了我的答案(在下面发布),虽然它确实使用了shell命令exec(),但是如果阻止脚本文件被上传(这个解决方案做得很好),你就不会遇到任何问题.
我想关闭特定文件夹中的php引擎,用户可以在其中上传文件,但似乎无法弄清楚。
PHP版本: 5.5.26
PHP模式: php-fpm(FastCGI进程管理器)
Apache版本: 2.2.29
(服务器: Synology DS212j-DSM 5.2)
您还有其他需要知道的吗?
php-fpm(和某些其他模式)不支持此功能,它会显示500错误,记录如下:
Invalid command 'php_value', perhaps mis-spelled or defined by a module not included in the server configuration.
Run Code Online (Sandbox Code Playgroud)
我试过按目录的php.ini文件(在avatars目录中放了一个额外的php.ini文件),但没有成功。PHP从未加载文件。不知道我做错了什么,我尝试将其命名为php.ini和.user.ini,但都没有用。
我还尝试在php.ini主文件中使用一个部分,
[path=/path/to/secure/dir]
engine = off
max_execution_time = 300
Run Code Online (Sandbox Code Playgroud)
当我这样做并phpinfo()
在安全目录中的文件中运行时,该文件max_execution_time
被设置为300(因此该文件已被重新加载),但是引擎仍在运行(我假设,因为phpinfo()
显示了)。
我也读过有关php-fpm池的信息,但是在我看来,您只能按域/虚拟主机指定池,我错了吗?
我尝试在此处<Directory /path/to/secure/dir>
建议的部分中从vhosts文件中禁用它(这就是所谓的名字吗?),但这也不被支持。
我正在基于Paniques的HUGE构建应用程序。在上载目录的.htaccess-file中,使用来关闭php引擎(出于安全原因)php_flag engine off
。