保护必须写入数据库的输入的步骤?

时间:2010-12-28 20:22:48

标签: php security xss sql-injection

假设我有Text这是一个POST textarea。在那个领域,我应该能够把我想写的东西放进去。例如XSS,SQL和其他最终的错误代码。对于标记,我将使用BBCode,所以我想显示代码而不使它工作。
当然,我想避免的是,DB被搞砸了!是否有非常安全的方法来执行此操作?

我实际采取的步骤是:

  1. 指定内容类型和字符集Content-Type: text/html; charset=UTF-8

  2. 限制输入。 Ex.: Max 500 characters

  3. 使用htmlentities()$GoodText = htmlentities($Text, ENT_QUOTES, "UTF-8");

  4. 使用mysql_real_escape_string()$GoodText = mysql_real_escape_string($GoodText);

  5. 将其存储在数据库$db->store($User, $GoodText);

  6. 据我所知,第3步和第4步完全相同,但我想得到解释。

    无论如何,这是一种工作方法吗?
    我是否也应该使用POST表单的令牌?

2 个答案:

答案 0 :(得分:1)

快速浏览:

  • 针对跨站点请求使用令牌 伪造的。

  • 使用htmlspecialchars / entities 跨站点脚本攻击。

  • 使用mysql_real_escape_string SQL注入。

对于数据库安全性,您只需使用mysql_real_escape_string函数进行转义。

答案 1 :(得分:0)

我使用的功能基本上是步骤3和4的组合。它适用于一维数组和字符串。

function escape($mixed){
    if(is_array($mixed)){
        foreach($mixed as $m => $value){
            $mixed[$m] = mysql_real_escape_string(htmlspecialchars($value, ENT_QUOTES, "UTF-8"));
        }
    }else{
        $mixed =  mysql_real_escape_string(htmlspecialchars($mixed, ENT_QUOTES, "UTF-8"));
    }
return $mixed;
}