如何在PHP中清除POST和GET变量以进行XSS和SQL注入

时间:2013-02-18 14:57:07

标签: php http-post xss http-get

在我的网络应用程序中是一个配置文件,其中包括数据库连接设置,并始终在PHP脚本的第一行加载。我想包含一个清除所有POST和GET数据的函数,可能存在现有的XSS和SQL注入风险。

我不确定该功能是否足够

function make_safe($variable) 
{
   $variable = strip_tags(mysql_real_escape_string(trim($variable)));
   return $variable; 
}

foreach ($_POST as $key => $value) {
   $_POST[$key] = make_safe($value);
}
//Same for $_GET & $_SESSION

你有这个问题的建议吗?

1 个答案:

答案 0 :(得分:3)

此功能:

function make_safe($variable) 
{
   $variable = strip_tags(mysql_real_escape_string(trim($variable)));
   return $variable; 
}

无效

SQL注入和XSS是两种不同的野兽。因为它们每个都需要不同的转义,所以你需要分别使用每个转义函数strip_tags和mysql_real_escape_string。 加入他们会破坏每个人的安全。

在将数据输入数据库时​​使用标准的mysql_real_escape_string()。 在将数据输出到屏幕之前查询数据库时使用strip_tags()。

为什么组合这两个功能是危险的 从马口:http://php.net/manual/en/function.strip-tags.php

由于strip_tags()实际上并未验证HTML,因此部分或损坏的代码可能会导致删除的文本/数据超出预期。

因此,通过将格式错误的html输入到数据库字段中,智能攻击者可以使用您的天真实现来击败组合中的mysql_real_escape_string()