我在000webhost上有一个PHP / MysqL网站(http://www.boisvert.me.uk;但目前还没有审查),我担心它的安全性.我想做的事情会使任何网站容易受到攻击;这是PHP相当于给儿童提供锋利的剪刀.我有各种各样的想法,以尽量减少网站的漏洞,但欢迎更多的建议.
特别是,有两个脚本:
>上传脚本.其目的是允许注册的站点用户上载某些XML文件(教程).显然,要做到这一点,网站上的文件夹可以为访问者提供写访问权限.我不喜欢这样,但我没有看到方法,我可以添加检查脚本(类型,大小),以确保上传的文件仅限于XML和一些图像.还有其他方面我可以改进吗?
>脚本2是PHP的解释器 – 用户可以在表单中输入PHP并执行(不保存).我希望允许用户尝试数据库访问,因此粗略的字符串替换确保我不需要泄露MysqL访问信息.但攻击者可以使用此解释器来访问文件区域并上传不受欢迎的材料.我的解决方案是将解释器放在一个单独的域中,没有文件可以上传.
任何改善这方面的建议都是值得欢迎的,“不要这样做”.我知道这很危险.所以过马路.谢谢你的帮助.
解决方法:
先前的答案涵盖了第一点(可能在本网站的其他地方多次)
对于第二点,如果你觉得你必须要有这个,我会提出一些建议.您可以编译自己的PHP二进制文件,排除您不希望用户需要的所有选项(可能省略除MysqL之外的所有选项).然后,您应该创建一个PHP.ini文件,该文件禁用任何有潜在危险的函数(对此使用disable_functions配置选项 – 请参阅其他答案).将内存使用和cpu时间限制为合理的数字(对于您希望允许用户运行的简单脚本).现在我们应该能够使用像system(“chroot / path / to / secure / dir ./PHP tempfile.PHP”);这样的东西在chrooted环境中运行所有这些. / path / to / secure / dir应该是您将用户PHP脚本写入临时文件的目录.它应该包含PHP可执行文件和安全的PHP.ini文件.这些文件和安全目录应该由运行脚本的用户(特别是PHP可执行文件和PHP.ini文件)以外的用户拥有,并且不可由任何人编写.安全目录应位于Web根目录之外.
现在,我不会假装我已经想到了一切,但希望这些想法可以成为您安全环境的基础.