在我的网络应用程序中是一个配置文件,其中包括数据库连接设置,并始终在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
你有这个问题的建议吗?
答案 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()
。