我正在为$_POST
输入创建一个函数,以防止在将值添加到数据库之前进行SQL注入。我在登录/注册时使用它,当用户需要发布文章时。据我所知,这并不能保证它不受XSS的影响。
输出数据或编辑数据时,我应该创建不同的功能吗?
谢谢。
function clean($str) {
$str = @trim($str);
if(get_magic_quotes_gpc()) {
$str = stripslashes($str);
}
return mysql_real_escape_string($str);
}
答案 0 :(得分:3)
你谈论XSS然后是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()
使用错误抑制器?
使用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。