基本sql注入


Basic sql injection

我正在努力学习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());
  1. 根据手册:

mysql_query()发送一个唯一的查询(多个查询不是supported)到服务器上当前活动的数据库与指定的link_identifier关联。

mysqli支持多个语句。

  1. --无法评论PHP代码!PHP注释为//#

一些链接可能会帮助你:[类似于你的问题]

  1. https://en.wikibooks.org/wiki/PHP_Programming/SQL_Injection_Attacks
  2. http://roshanbh.com.np/2007/12/sql-injection-attack-examples-and-preventions-in-php.html
  3. SQL注入测试-mysql_query

为了防止SQL注入,您不应该直接注入变量来查询,而应该使用Prepared Statements。