PHP中的SQL注入,如何将非转义引用发送到服务器?

Com*_*ler 0 php mysql sql-injection escaping

这段代码似乎不安全:

<form method='post'>
<input type='text' name='x' style='width:1000px'>
<input type='submit' value='Send'>
</form>
<?php
if(isset($_POST['x']))
{
    require_once("db_connect.php");
    $q = mysqli_query($dbc, "SELECT x FROM table where x = '". $_POST['x'] ."'");
    while($r = mysqli_fetch_assoc($q))
        echo $r['x'];
}
Run Code Online (Sandbox Code Playgroud)

但是当我发送恶意输入时,它没有用.所以我制作了类似的剧本:

<form method='post'>
<input type='text' name='x' style='width:1000px'>
<input type='submit' value='Send'>
</form>
<?php

if(isset($_POST['x']))
    echo $_POST['x'];
Run Code Online (Sandbox Code Playgroud)

当我发送'(撇号)时,我收到了\'.所以它会自动转义.我的问题是,它发生在哪里?如何发送'清除'撇号?

Ali*_*ken 5

你可以有魔术行情.您运行的是哪个版本的PHP?Magic Quotes在5.3中已弃用,在5.4中已删除,但在出现时默认为ON.

Magic Quotes会自动逃避报价,但你真的不应该依赖它.您应该将其关闭并使用不同的转义方法,或者更好地查看使用预准备语句.

运行get_magic_quotes_gpc()以查看是否已打开它们.如果是这样,请通过对php.ini文件进行以下更改来关闭它们:

; Magic quotes
;

; Magic quotes for incoming GET/POST/Cookie data.
magic_quotes_gpc = Off

; Magic quotes for runtime-generated data, e.g. data from SQL, from exec(), etc.
magic_quotes_runtime = Off

; Use Sybase-style magic quotes (escape ' with '' instead of \').
magic_quotes_sybase = Off
Run Code Online (Sandbox Code Playgroud)