检测用php fwrite创建的字符串或文件中的敏感/错误单词

时间:2016-04-08 10:31:39

标签: php arrays fwrite

编辑更多信息 我在管理区域中有一个页面,用户可以在其中编写自己的PHP / HTML文件,以添加他们想要在其网站中使用的额外功能等。我有一系列“危险”的词来过滤掉任何与核心数据库表混淆的内容,例如能够编写恶意代码来删除成员表(例如)。

textarea / code区域获取内容并使用fwrite将其全部放入PHP文件中,然后可以通过网站上的模板标记将其包含在内。

当文件被保存时,它会读取所有文本,并根据无法使用的单词“危险数组”进行检查(例如:exec,system,delete from,drop database等)。

但是我最近发现了一个缺陷,下面的变量可以放在文件中,然后可以使用mysql命令:

$var = "DR" . "OP ". "TA" . "BL" . "E";
$sql = mysql_query($var tablename);

通过字符数组匹配检查所有文件内容在此方案中不起作用。

    $dangerous = "/\b(exec|system|delete from|drop database)\b/i";

    if (preg_match($dangerous, $code)) {
       $tag_code = preg_replace($dangerous, '', $tag_code);
    }

------- 结束编辑

我有一个函数可以检查一组“坏词”并在保存新的自定义用户生成文件时过滤掉它们(类似于this question所说的),但我发现它很容易就可以了通过将无效的单词与变量分开来避免。

例如,“DELETE FROM”是一个无效的短语,但如果使用以下内容制作文件:

$var = "DE" . "LET". "E " . "FR" . "OM";

阵列过滤器显然无法以通常的方式检测到这一点。问题是这些变量“hacks”可以任意组合编写,所以我不确定如何 - 或者 - 是否有办法在文件中检测这样的事情。

可以这样做吗?

0 个答案:

没有答案