我有一个项目,其中有登录/注销功能,经过身份验证的用户可以上传,下载和删除他们拥有的文件。
我的问题是:我的项目的文件部分是否有足够的安全性来使用htmlentities()
转义文件名,并防止用户打开文件所在的目录
<Directorymatch /cloud/>
Order deny,allow
Deny from all
</Directorymatch>
这意味着如果上载了.php文件,则用户无法在我的服务器上运行该文件。此外,如果文件名包含脚本/ html,那么它不会取消。
在安全方面我还缺少什么?我可能会成为这个盗版“谷歌驱动器”的唯一用户,但我想认真对待安全问题。我错过了什么?
在上传之前,您需要确保上传的文件经过良好的清理和验证。
finfo_ *库会很好,但它可以使用php> = 5.3.0版本。下面的Stackoverflow链接提供了有关如何使用最佳安全措施验证和保护文件上载的最佳解决方案。 Source Link
您可能需要在上传目录中关闭php引擎。所以你可以创建一个php.ini文件并输入这行代码
engine = off
更新部分
您可以使用shell_exec()
和exec()
在本地测试内容,但是您必须在生产中禁用它们,因为攻击者可以使用这些shell命令来获取可能导致整个网络受损的系统或文件信息。
对于Instance,请查看下面的shell_exec()
代码
<?php
// Use ls command to shell_exec
// function
$output = shell_exec('ls');
// Display the list of all file
// and directory
echo "<pre>$output</pre>";
?>
输出:
transaction.php
index.html
moneyupdate.php
现在来看看下面的Exec()
代码
<?php
// (on a system with the "iamexecfunction" executable in the path)
echo exec('iamexecfunction');
?>
输出:
transaction.php
所以简而言之,由你来决定。如果你在共享主机上,请你需要禁用它们,因为你的托管邻居可能会互相干扰,但如果你是VPS或Dedicated,你可以自己尝试一下