所以我在我的网站上发现了允许执行sql注入的bug
http://mysite.com/script.php?id=1 union select 1,2,3
将输出Id属性等于1的所有字段以及1,2,3的额外行。我知道我必须验证用户输入以关闭我的错误。
然而我的问题却是另一回事。是否可以执行更新查询或插入查询?我可以使用 - 来评论查询,但是我不能使用由;
分隔的多个语句。所以可以在我的情况下执行更新查询。如果需要,我可以显示PHP代码和SQL查询。
$sql = "SELECT id, title, text from table where cId=$val";
$result = mysql_query($sql);
$array = mysql_fetch_array($result);
//echo rows in table
答案 0 :(得分:3)
从MySQL Injection - Use SELECT query to UPDATE/DELETE来判断 所有保护你是mysql_query的限制。我不会依赖于此,特别是它不会随着时间的推移而保持这种状态。您永远不应该依赖于默认情况下禁用的功能。 也许下一个版本已经允许使用。
等语句SELECT id, title, text from table where cId=1; DROP table table
答案 1 :(得分:0)
不,这是不可能的。很可能你运行 mysql_query ,这不允许在一次传递中运行多个查询。因此,如果您的查询以SELECT开头(就像它一样),它将不允许任何UPDATE注入
编辑:即使在输入中也使用 mysql_real_escape_string
答案 2 :(得分:0)
默认情况下,这是不可能的。虽然有mysql_query
选项可以在MySQL 5.0之后的一个字符串中运行多个语句,但必须使用mysql_set_server_option
进行设置。
请考虑更改您的语句命令,以使用mysql_real_escape_string
:
$q = mysql_fetch_array(mysql_query("SELECT id, title, text from table where cId = " . mysql_real_escape_string($val)));
您最好将代码更改为使用PDO,因为所有mysql_ *函数都已正式弃用。