这个SQL查询是否容易受到注入?

use*_*579 2 php mysql code-injection

$column = $_GET['id'];
$result = mysql_query("SELECT $column FROM table");
echo $result;
Run Code Online (Sandbox Code Playgroud)

我正在用mysql构建一个网站,因此我试图了解sql注入.我认为这段代码容易受到攻击,但我似乎无法进行有效的攻击.我如何从表'example2'中拉出'here'列?

谢谢

Eri*_*rik 6

想象一下$ _GET ['id']等于这样的东西

* FROM anytable_i_want; -- 
Run Code Online (Sandbox Code Playgroud)

double hypen意味着你的字符串的其余部分是注释...所以现在你正在执行的sql是:

SELECT * FROM anytable_i_want;
Run Code Online (Sandbox Code Playgroud)

防止这种废话的唯一最佳方法是准备好的声明.如果您使用PDO界面,则执行以下操作:

$HANDLE = $PDO->prepare('SELECT ? FROM mytable');
$HANDLE->execute(array($_GET['id']));
Run Code Online (Sandbox Code Playgroud)

现在无论提交什么作为$ _GET ['id'],它都会产生任何奇怪的效果.

mysql_real_escape_string 如果使用我的mysql_系列函数,将会覆盖你,尽管如果你在运行时更改了charset,你可能会受到一些攻击.