有效的SQL注入保护功能
Effective protection function against SQL injection
我在一个免费软件中发现了这个清理功能:
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
您想使用准备好的语句
http://www.w3schools.com/php/php_mysql_prepared_statements.asp
很多天以来,我一直在使用 mysqli_real_escape_string
功能。避免sql注入是一个很好的功能。
并且,请避免 mysql
extension.This 扩展程序将来会被删除。相反,应该使用 MySQLi
or PDO_MySQL
扩展名。
简短的回答是 一点都不安全。
这是它的问题...
- 您正在检查
get_magic_quotes_gpc
,它已从 PHP 中删除多年
- 如果魔术引号打开,您正在使用
htmlentities
对字符串进行编码,但如果它关闭则不会(破坏数据的方式)
- 为什么要使用
htmlentities
向数据库发送数据?它根本无法阻止 sql 注入。
addslashes
在转义数据时不考虑客户端连接字符编码(这使得它非常不安全)
- 您正在返回一个未定义的变量(即
NULL
),使整个函数无用
此外,mysql
已弃用并已从 PHP 中删除 7. 请改用较新的 MySQLi 扩展名。
您可以简单地将整个函数替换为较新的数据库 API 提供的功能,例如 MySQLi 和 PDO,它们提供 准备好的语句 和参数化查询,已被证明是可靠和安全的。您在此处的示例中提供的代码显然是古老的并且非常不安全。
我在一个免费软件中发现了这个清理功能:
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
您想使用准备好的语句
http://www.w3schools.com/php/php_mysql_prepared_statements.asp
很多天以来,我一直在使用 mysqli_real_escape_string
功能。避免sql注入是一个很好的功能。
并且,请避免 mysql
extension.This 扩展程序将来会被删除。相反,应该使用 MySQLi
or PDO_MySQL
扩展名。
简短的回答是 一点都不安全。
这是它的问题...
- 您正在检查
get_magic_quotes_gpc
,它已从 PHP 中删除多年 - 如果魔术引号打开,您正在使用
htmlentities
对字符串进行编码,但如果它关闭则不会(破坏数据的方式) - 为什么要使用
htmlentities
向数据库发送数据?它根本无法阻止 sql 注入。 addslashes
在转义数据时不考虑客户端连接字符编码(这使得它非常不安全)- 您正在返回一个未定义的变量(即
NULL
),使整个函数无用
此外,mysql
已弃用并已从 PHP 中删除 7. 请改用较新的 MySQLi 扩展名。
您可以简单地将整个函数替换为较新的数据库 API 提供的功能,例如 MySQLi 和 PDO,它们提供 准备好的语句 和参数化查询,已被证明是可靠和安全的。您在此处的示例中提供的代码显然是古老的并且非常不安全。