Php 基本sql注入

Php 基本sql注入,php,mysql,Php,Mysql,我正在努力学习SQL注入,以便将来能够保护自己 以下是PHP代码: $req = mysql_query("INSERT INTO ip_change VALUES('', '".$_SESSION['id']."', '".$_POST['raison']."')") or die(mysql_error()); 用户可以完全控制$_POST['raisson']内容 当我使用'hello as$\u POST['raisson']值时,我得到 您的SQL语法有错误;检查手册 对应于您的

我正在努力学习SQL注入,以便将来能够保护自己

以下是PHP代码:

  $req = mysql_query("INSERT INTO ip_change VALUES('', '".$_SESSION['id']."', '".$_POST['raison']."')") or die(mysql_error());
用户可以完全控制$_POST['raisson']内容

当我使用'hello as$\u POST['raisson']值时,我得到

您的SQL语法有错误;检查手册 对应于您的MySQL服务器版本,以便使用正确的语法 靠近1号线的“你好”

当我使用“;从tabledetest中删除*;或DIEU错误;-作为我得到的$u POST['raisson']值

您的SQL语法有错误;检查手册 对应于您的MySQL服务器版本,以便使用正确的语法 从tabledetest中删除*附近;或DIEU错误;-排队 一,

所以我不明白为什么我的请求没有被注入,我不能删除我的tabledetest表


任何帮助都将不胜感激。

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

那是因为你没有正确注射

这是你做的那件。自动格式将提示您:

<?php
$_SESSION['id'] = "123"; //Just assume

$req = mysql_query("INSERT INTO ip_change VALUES('', '123', ''hello')") or die(mysql_error());
发件人: mysql\u query发送一个唯一的查询多个查询都不是 受支持的服务器上当前活动的数据库 与指定的链接标识符关联

mysqli支持

-不能评论PHP代码!PHP注释为//或 一些可能对您有帮助的链接:[与您的问题类似]


您可能应该停止使用mysql,开始使用mysqli或PDO。@具有讽刺意味的是,就本练习而言,它实际上是最好的工具。mysql_查询接口非常糟糕,在PHP7中被删除。如果您试图编写安全代码,则必须使用mysqli或PDO之类的东西,并将准备好的语句作为绝对最小值。一般来说,最好使用ORM-like或封装数据库,这样可以使开发更加愉快,或者更好的是,使用like可以为您提供更多支持。从doc for-mysql\u query发送一个唯一的查询,不支持多个查询。这就是为什么第二个代码失败的原因,因为mysql_查询只允许1个查询,所以a之后的任何内容;将引发一个错误当您默认情况下无法运行多个命令时,请想象这样的情况:从用户中选择*,其中username='{$\u POST['username']}'和email='{$\u POST['email']}'。现在,这应该是安全的,因为用户需要知道用户名和电子邮件,但是用户名admin-意味着我们不必像知道管理员电子邮件那样-将使查询的其余部分成为注释。您还可以开始与其他表连接,获取不允许查看的信息。在这种情况下,OP希望直接注入变量,正如开场白所说,我正在努力学习SQL注入,以便在未来保护自己。现在的问题是让不起作用的注入做坏事。我已经解释了OP的问题:我不明白为什么我的请求没有被注入。我得到了那么多,但是你能让它正确地注入吗?谢谢Thamizhan,这是否意味着由于mysql\u查询不支持多个查询,我就不会受到这种不安全查询的攻击?这是否意味着我不能用这个缺陷删除我的tabledetest?如果是这样的话,您会建议我如何更改php代码以使其可注入?@shrimpdrake绝对,mysql消除了一个SQL注入。如果您想使用多个语句,您应该选择mysqli.*。我在答案中已经提到,快结束的时候
$req = mysql_query("INSERT INTO ip_change VALUES('', '123', ''); DELETE * FROM tabledetest;") or die(mysql_error());--')") or die(mysql_error());