我正在尝试一种SQL注入:
http://localhost/test/mysql.php?uid=1;%20DROP%20TABLE%20test
此网址应与语句相同:
SELECT username FROM test WHERE userid=1; DROP TABLE test
但是,当我打开此网址时会弹出一个错误:
Error:You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'drop table test' at line 1
似乎'drop table test'被放入一对引号中,但不被视为声明。相应的PHP代码是这样的:
$SQL="select username from login where userid=".$userid;
$result=mysql_query($SQL);
我想知道原因。感谢您提供任何有用的答案。
答案 0 :(得分:3)
mysql_query
不支持一次执行多个语句:
mysql_query()
向服务器上当前活动的数据库发送唯一查询(不支持多个查询),该数据库与指定的 {{1}相关联} 强>
这也反映在MySQL错误消息中,它将link_identifier
之后的所有内容引用为意外。
答案 1 :(得分:1)
Mysql不支持多个查询执行
如果你愿意,你只需要将标志65536作为mysql_connect的第5个参数传递。该标志在 MySQL Client flags 中定义。
#define CLIENT_MULTI_STATEMENTS 65536 /* Enable/disable multi-stmt support */
#define CLIENT_MULTI_RESULTS 131072 /* Enable/disable multi-results */
mysql_connect()应该为此做好准备:
mysql_connect($host, $username, $password, false, 65536);
警告:
答案 2 :(得分:0)
尝试回显SQL变量以查看问题所在。
答案 3 :(得分:0)
这很简单,你应该首先解析uid = 1,它应该是整数,或者在任何其他情况下,如果它是字符串,那么你必须根据db中的列名来限制它来检查uid的长度。