这个查询可以安全地避免 SQL 注入吗?

2024-04-19

该脚本使用 PHP 编写,作为数据库,我使用 MySQL。这是脚本本身。

$unsafe_variable = $_GET["user-input"];
$sql=sprintf("INSERT INTO table (column) VALUES('%s')",$unsafe_variable);
mysql_query($sql);

有人说如果用户分配;DROP TABLE blah;字符串到变量 $unsafe_variable 它会删除表。

但我尝试了这个例子,

http://localhost/test.php?user-input=DROP%20TABLE%20my_table 

但它并没有删除表而是插入了新行(;DROP TABLE blah;)在表中。

有人能解释一下如何通过 sql 注入来攻击这个脚本吗?


自 PHP 以来,该特定注入将不起作用mysql_query函数每次调用只允许一次查询。但是,如果以下情况可能有效column有一个主键或唯一键:

$unsafe_variable = "admin') ON DUPLICATE KEY UPDATE password=MD5(CONCAT('knownsalt', 'newpassword'))#";

最好用长篇大论mysql_real_escape_string功能:

$sql=sprintf("INSERT INTO table (column) VALUES(%s)",
             mysql_real_escape_string($unsafe_variable));
mysql_query($sql);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

这个查询可以安全地避免 SQL 注入吗? 的相关文章

随机推荐