我刚刚阅读了有关SQL注入的信息,并在我正在阅读的博客中找到了此功能
我想知道SQL注入是否安全..如果我将remove_mq($_POST)传递给它,是否可以在查询中使用$_POST["var"]而不出现问题?
function remove_mq($array){
foreach($array as $key => $value){
if(is_array($value)){
$array[$key] = remove_mq($value);
}
else{
$array[$key] = addslashes($value);
}
}
return $array;
}
什么是remove_mq?
@Konerak:对正在显示的函数的递归调用。
如何在mysql插入语句中包含PHP变量的可能重复项
不可以。加号不是针对查询进行转义的适当功能。您需要使用mysql_real_escape_string
除此之外,在实际在查询中使用值之前,请勿执行SQL转义。假设您有类似的东西-那么您需要将其htmlspecialchars()转义,而不是addslashes(等)转义
除此之外,最好的解决方案是将PDO与预处理语句一起使用,因为您将SQL查询与参数分开,因此根本不需要任何转义。
PDO准备好的语句优于对特定查询使用mysql_real_escape_string。 顺便说一句,addslashes并不安全的原因是,某些特定的多字节字符将使攻击者仍然可以进行恶意查询。
感谢您的评论,似乎需要为我做更多的研究;)
好吧,以上所有答案都没有抓住重点。
只要您的数据编码是utf-8或任何单字节编码,addslashes()就足够了。
但是,尽管使用了功能,但整个方法完全是错误的
对$ _POST进行大量转义没有任何意义,并且不能保证全面的保护。
没一个addlashes也没有mysql_real_escape_string做任何实际的保护。它的作用与字符串定界符转义一样少。因此,您必须使用以下功能:
仅在字符串上
仅针对实际要查询的字符串。
所有其他必需的操作均在注释的链接中进行了描述
和一些有关此事的受过良好教育的人的信息:
您心爱的PDO,开箱即用时,请确实使用相同的脱脂斜杠
谢谢上校,总是很高兴获得专业人士的建议:)您是不是有一位老师?
当今的最佳做法是准备查询。
例:
$stmt = $pdo->prepare('SELECT username FROM users WHERE id = :id');
$stmt->execute(array(':id' => $_GET['id']));
$result = $stmt->fetchAll();
此代码是完全安全的
不,只需使用内置功能即可! mysql_real_escape_string()总是比您可以编写的任何函数更可靠。
这是一篇文章,解释为什么应在addslashes上使用mysql_real_escape_string。
当然,最好的方法是使用准备好的查询。这是关于它们的一些信息。
为什么要下票?