假设我有Text
这是一个POST textarea。在那个领域,我应该能够把我想写的东西放进去。例如XSS,SQL和其他最终的错误代码。对于标记,我将使用BBCode,所以我想显示代码而不使它工作。
当然,我想避免的是,DB被搞砸了!是否有非常安全的方法来执行此操作?
我实际采取的步骤是:
指定内容类型和字符集Content-Type: text/html; charset=UTF-8
限制输入。 Ex.: Max 500 characters
使用htmlentities()$GoodText = htmlentities($Text, ENT_QUOTES, "UTF-8");
使用mysql_real_escape_string()$GoodText = mysql_real_escape_string($GoodText);
将其存储在数据库$db->store($User, $GoodText);
据我所知,第3步和第4步完全相同,但我想得到解释。
无论如何,这是一种工作方法吗?
我是否也应该使用POST表单的令牌?
答案 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;
}