1

我正在启动一个非常基本的站点,它使用单行表单发布到数据库中,然后$comment在页面上回显该变量。我不知道 PDO,但如果我真的需要它来做这么简单的事情,我愿意学习。

else
mysql_query("INSERT INTO posts (postid, post_content)
VALUES ('', '$comment <br />')");
}
mysql_close($con);

在这段代码之上,我有基本的 strpos 命令来阻止一些我不想发布的东西。

在我这样做的过程中,我是否会在注射过程中遇到任何问题?

4

5 回答 5

3

是的,这很危险。所有人所要做的就是加上一个单引号,然后是他们想要的 SQL 代码。如果您想以旧方式修复它或使用 PDO 准备语句作为新方式,请在此语句之前使用 $comment = mysql_real_escape_string ($comment)。这是文档中的一个基本示例:

<?php
$stmt = $dbh->prepare("INSERT INTO REGISTRY (name, value) VALUES (:name, :value)");
$stmt->bindParam(':name', $name);
$stmt->bindParam(':value', $value);

// insert one row
$name = 'one';
$value = 1;
$stmt->execute();

// insert another row with different values
$name = 'two';
$value = 2;
$stmt->execute();
?>
于 2012-06-28T05:35:34.893 回答
3

不,这不安全,你需要使用mysql_real_escape_string来逃避$comment

但是,PDO 并不难,它可以让你的代码更强大。

// create the connection. something like mysql_connect/mysql_error
try {
    $dbh = new PDO($dsn, $user, $password);
} catch (PDOException $e) {
    echo 'Connection failed: ' . $e->getMessage();
}

// create the prepared statement.
$stmt = $dbh->prepare("INSERT INTO posts (postid, post_content) VALUES (?, ?)");
// execute it with parameters.
$stmt->execute(array('', $comment.'<br>'));
于 2012-06-28T05:43:37.930 回答
0

这很容易受到 sql 注入的影响,因为您的 $comment 是用户输入的,他们也可以输入一些 SQL 命令,而您的 PHP 代码最终将执行相同的操作。

考虑为 USERS 表设置的 $comment 值'TRUNCATE TABLE USERS;'可能是对您的应用程序可能至关重要的任何内容。

在 PHP 中,我相信您可以通过使用mysql_real_escape_string(). 阅读它。

有关 SQL 注入的详细信息,请参阅此文档:https ://docs.google.com/document/d/1rO_LCBKJY0puvRhPhAfTD2iNVPfR4e9KiKDpDE2enMI/edit?pli=1

于 2012-06-28T05:38:40.800 回答
0

将表单输入数据绑定到mysql查询是解决sql注入的完美方案。为此目的使用 binaParam 方法。

于 2012-06-28T06:24:24.323 回答
0

不,仅从您在此处发布的代码来看,您没有受到 SQL 注入的保护。这是一个简单的例子$comment

'), (null, (select concat(user(),':',password) s from mysql.user where concat(user,'@',host)=user() LIMIT 1) --

这将添加另一行,其中包含当前用户的登录凭据。有了LOAD_FILE他,他还可以从您的文件系统中读取文件。他还可以在文件系统上写入任意文件:

' + (select '<?php echo "Hello, World!";' into dumpfile '/path/to/your/document_root/foobar.php')) --

使用这种技术,攻击者可以将任意文件上传到您的服务器,例如在您的系统上运行任意命令的 web shell。

因此,您绝对必须保护自己免受 SQL 注入的影响,其中使用准备好的语句或参数化语句的自动转义优于使用mysql_real_escape_string.

于 2012-06-28T18:17:56.193 回答