1

在我的网络应用程序中是一个配置文件,其中包括即数据库连接设置 ans 总是在 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

你有这个问题的建议吗?

4

1 回答 1

4

这个功能:

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()您的组合。

于 2013-02-18T15:02:28.600 回答