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

时间:2011-04-02 04:05:40

标签: php mysql code-injection

$column = $_GET['id'];
$result = mysql_query("SELECT $column FROM table");
echo $result;

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

由于

4 个答案:

答案 0 :(得分:6)

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

* FROM anytable_i_want; -- 

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

SELECT * FROM anytable_i_want;

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

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

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

如果使用我的mysql_系列函数,

mysql_real_escape_string将覆盖您,尽管如果您在运行时更改字符集,可能会受到一些攻击。

答案 1 :(得分:3)

看看PDO和使用预准备语句来帮助防止SQL注入:

http://net.tutsplus.com/tutorials/php/why-you-should-be-using-phps-pdo-for-database-access/

答案 2 :(得分:1)

使$ column类似于:

" here FROM example2 -- "

答案 3 :(得分:1)

如果以下文本作为$ _GET ['id']传递,您将获得利用:

$_GET['id'] = '[other sql commands here]';

使用mysql_real_escape_string()mysqli_real_escape_string()(如果您使用的是改进的界面)