我在自由软件中找到了这个消毒功能:
function VerifChamps($valeur)
{
$verif = (get_magic_quotes_gpc()) ? htmlentities($valeur, ENT_QUOTES) : addslashes($valeur);
return $verif;
}
然后查询完成:
$login=VerifChamps($_POST['name']);
mysql_select_db(..., ...);
$query = sprintf("SELECT * FROM table WHERE login='%s'", $login);
$Result = mysql_query($query, $connexion) or die(mysql_error());
$row_RsProf = mysql_fetch_assoc($Result);
mysql_free_result($Result);
这段代码有多安全?如何改进它以使其更安全?
编辑:服务器正在运行PHP v5.2.13,启用了Magic Quotes
答案 0 :(得分:7)
简短的回答是 根本不安全 。
这就是它的错误......
get_magic_quotes_gpc
htmlentities
对字符串进行编码,但如果它已关闭(将损坏数据的方式),则不会对其进行编码htmlentities
将数据发送到数据库?它根本不会阻止sql注入。addslashes
不会考虑客户端连接字符编码(这使得它非常不安全)NULL
),使整个函数无效此外,mysql
已被弃用,已从PHP 7中删除。请改用较新的MySQLi扩展程序。
您可以使用提供MySQLi和参数化查询的新PDO和prepared statements等新数据库API提供的功能简单地替换您的整个功能,这些查询已被证明是可靠且安全的。你在这个例子中提供的代码显然很古老而且非常不安全。
答案 1 :(得分:2)
很多天,我正在使用mysqli_real_escape_string
功能。它是避免sql注入的一个很好的函数。
答案 2 :(得分:1)