我试图学习SQL注射,以便将来保护自己。
这是PHP代码:
$req = mysql_query("INSERT INTO ip_change VALUES('', '".$_SESSION['id']."', '".$_POST['raison']."')") or die(mysql_error());
用户可以完全控制$ _POST [' raison']内容。
当我使用'hello
作为$ _POST [' raison']值时,我得到了
您的SQL语法有错误;检查手册 对应于您的MySQL服务器版本,以便使用正确的语法 靠近'你好')'在第1行
当我使用'); DELETE * FROM tabledetest;") or die(mysql_error());--
作为$ _POST [' raison']值时,我得到了
您的SQL语法有错误;检查手册 对应于您的MySQL服务器版本,以便使用正确的语法 靠近' DELETE * FROM tabledetest;")或死(mysql_error()); - ')'在线 1
所以我不明白为什么我的请求没有被注入,我无法删除我的tabledetest表。
任何帮助都将不胜感激。
答案 0 :(得分:3)
因为你没有做适当的注射!
这是你做过的那个。自动格式会暗示你:
<?php
$_SESSION['id'] = "123"; //Just assume
$req = mysql_query("INSERT INTO ip_change VALUES('', '123', ''hello')") or die(mysql_error());
它没有正确地结束声明。
下一个:
$req = mysql_query("INSERT INTO ip_change VALUES('', '123', ''); DELETE * FROM tabledetest;") or die(mysql_error());--')") or die(mysql_error());
mysql_query()
发送一个唯一的查询(多个查询不是 支持到服务器上当前活动的数据库 与指定的link_identifier相关联。
mysqli
支持multiple statements。
--
无法评论PHP代码! PHP评论为//
或#
可能对您有所帮助的一些链接:[与您的问题类似]
答案 1 :(得分:1)
为了防止SQL注入,您不应该直接将变量注入查询使用Prepared Statements。