基本的sql注入

时间:2016-05-01 16:52:13

标签: php mysql

我试图学习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表。

任何帮助都将不胜感激。

2 个答案:

答案 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());
  1. 来自the manual
  2.   

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

    mysqli支持multiple statements

    1. --无法评论PHP代码! PHP评论为//#
    2. 可能对您有所帮助的一些链接:[与您的问题类似]

      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 injection test - mysql_query

答案 1 :(得分:1)

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