gpt4 book ai didi

php - 有效的SQL注入(inject)防护功能

转载 作者:行者123 更新时间:2023-11-29 01:09:49 27 4
gpt4 key购买 nike

我在一个免费软件中发现了这个清理功能:

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

最佳答案

简短的回答是它一点都不安全

这是它的问题所在......

  1. 您正在检查 get_magic_quotes_gpc,它已从 PHP 中删除多年
  2. 如果魔术引号打开,您将使用 htmlentities 对字符串进行编码,但如果它关闭则不会(破坏数据的方式)
  3. 为什么要使用 htmlentities 将数据发送到数据库?它根本不能防止 sql 注入(inject)。
  4. addslashes 在转义数据时不考虑客户端连接字符编码(这使得它非常不安全)
  5. 您正在返回一个 undefined variable (即 NULL),使整个函数无用

此外,mysql 已被弃用并已从 PHP 7 中删除。使用较新的 MySQLi扩展名。

您可以简单地将整个函数替换为较新的数据库 API 提供的功能,例如 MySQLiPDO哪个报价prepared statements和参数化查询,这些查询已被证明是可靠和安全的。您在此处的示例中提供的代码显然是古老的并且非常不安全。

关于php - 有效的SQL注入(inject)防护功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31228769/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com