如何在我的功能中防止XSS攻击?

时间:2011-08-25 13:15:00

标签: php sql-injection xss

我正在为$_POST输入创建一个函数,以防止在将值添加到数据库之前进行SQL注入。我在登录/注册时使用它,当用户需要发布文章时。据我所知,这并不能保证它不受XSS的影响。

输出数据或编辑数据时,我应该创建不同的功能吗?

谢谢。

function clean($str) {
    $str = @trim($str);
    if(get_magic_quotes_gpc()) {
        $str = stripslashes($str);
    }
    return mysql_real_escape_string($str);
}

4 个答案:

答案 0 :(得分:3)

你谈论XSS然后是SQL注入......

SQL

使用mysql_real_escape_string()或更好地将params与PDO等库绑定。

如果可能magic_quotes,请使用...

function sqlEscape($str) {
   if (get_magic_quotes_gpc()) {
      $str = stripslashes($str);
   }
   return mysql_real_escape_string($str);
}

关于您的示例,为什么需要使用trim()来确保数据安全?另外,为什么在trim()使用错误抑制器?

XSS

使用htmlspecialchars($str, ENT_QUOTES)防止HTML特殊字符具有特殊含义。

答案 1 :(得分:3)

尝试使用预准备语句。它们旨在自动逃避事物。他们还应该在源代码中保持您的查询更清晰。

答案 2 :(得分:0)

我使用以下方法,它可以很好地防止注射:

function clean($str) {
    $value = mysql_escape_string(stripslashes(htmlspecialchars($str)));
    return $value;
}

答案 3 :(得分:0)

您不应将编码HTML的值保存到数据库中。在输出它们时这样做,而不是在保存它们时(保存编码的HTML会使搜索更难,使得它们的大小更大,使得以HTML以外的格式使用它们更加困难并且通常只是错误 - 您的数据库应该存储实际文本,而不是格式化为以特定方式显示的文本。)

此外,正如Quamis所说,您应该查看PDO或其他一些允许您使用预准备语句而不是手动转义的DBAL。