我正在努力学习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 table可憎;")或第行处的die(mysql_error());--')'1
所以我不明白为什么我的请求没有被注入,而且我不能删除我的表。
如有任何帮助,我们将不胜感激。
这是因为你没有进行正确的注射!
这是你做的一个。自动格式将提示您:
<?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()
发送一个唯一的查询(多个查询不是supported)到服务器上当前活动的数据库与指定的link_identifier关联。
mysqli
支持多个语句。
--
无法评论PHP代码!PHP注释为//
或#
一些链接可能会帮助你:[类似于你的问题]
- https://en.wikibooks.org/wiki/PHP_Programming/SQL_Injection_Attacks
- http://roshanbh.com.np/2007/12/sql-injection-attack-examples-and-preventions-in-php.html
- SQL注入测试-mysql_query
为了防止SQL注入,您不应该直接注入变量来查询,而应该使用Prepared Statements。