基本的PHP sql注入问题

时间:2011-08-19 15:17:53

标签: php mysql sql sql-injection

我一直在对SQL注入进行一些研究,到目前为止我所能看到的是当你将查询字符串与变量连接起来时,你就会遇到问题。

我的问题是:

如果我有这段代码:

$query  = "SELECT id, name, inserted, size FROM products";
$result = odbc_exec($conn, $query);

我是否接受sql注入?我不这么认为,但我在stackoverflow上发现了一个帖子,表明它是。

现在,如果我有这段代码:

$variable = "name";
$query = "SELECT"' .$variable. ' FROM products";
$reulst = odbc_exec($conn, $query);

我还在注射吗?在我看来,我完全控制了该变量,代码在服务器端运行,这样才是安全的。这是对的吗?

提前感谢任何输入!

7 个答案:

答案 0 :(得分:6)

如果您有来自您无法信任的来源的输入,则SQL注入通常是个问题。在你的两个例子中都没有看到这种情况,就恶意攻击而言,你就没事了。

但是,最好在将$variable插入查询字符串之前将其转义,即使您控制它也是如此。

答案 1 :(得分:2)

如果您允许任何用户输入您的查询,则您很容易进行SQL注入。通过提供的两个示例,用户没有输入任何内容,因此这些都是安全的。

答案 2 :(得分:2)

第一个查询不受注入,因为没有动态部分。

第二个是。即使您,您也可以完全控制您的变量,如果您使用的是用户提供的数据(无论是来自表单sumbit,cookies等......),您也可能容易受到攻击。

始终通过SQL库使用参数化查询,以确保数据安全转义。

答案 3 :(得分:1)

查询可以曝光的唯一情况是当部分内容从输入传递时。

$variable = $_GET["name"];
$query = "SELECT " .$variable. " FROM products";  // now things can get bad
$reulst = odbc_exec($conn, $query);

在查询中使用输入变量的一种正确方法是转义

$variable = addslashes($_GET["name"]); // sanitizing input
$query = "SELECT " .$variable. " FROM products";  // all good here
$reulst = odbc_exec($conn, $query);

答案 4 :(得分:0)

问题是“你的变量的价值来自哪里?”如果您在查询中使用用户提交的数据,那么您需要小心如何使用它。在你的情况下,就我所知,你是安全的。

答案 5 :(得分:0)

对于第一个示例,不,您将不会受到任何SQL注入,因为用户无法输入任何内容来更改您的查询。

在第二种情况下,如果$variable来自某些用户输入,则只能进行注射。

答案 6 :(得分:0)

只要你将用户输入直接输入$ query,就很容易被sql注入。您显示的第一个代码很好,它是一个直接查询,用户无法输入任何有害代码。

$query  = "SELECT id, name, inserted, size FROM products";
$result = odbc_exec($conn, $query);

但是第二个代码片段(如果$ variable是从表单中获取的),任何人都可以输入有害代码并终止您的数据库。

$variable = $_POST['name']; **for instance, this would be bad!
$query = "SELECT"' .$variable. ' FROM products";
$reulst = odbc_exec($conn, $query);

$ variable如何获得其值?