-2

我正在解析一个 url 并使用该数字作为 id 来提取特定条目

因此,使用如下声明:

$blog_id = 5;

$query = "SELECT id,entry,date,views,comments,likes FROM blogs WHERE id=$blog_id ORDER by Id DESC";

那是安全的还是我应该使用 .... id=?... 并使用 bind_param ?

4

5 回答 5

1

您应该为您的 sql 使用准备好的语句,因为您从 url 插入一些值,这些值可以被操纵并破坏您的数据库

于 2015-06-10T06:20:12.627 回答
1

您的代码显示您没有从 URL 获取值,而是将值 5 硬编码到变量中

$blog_id = 5;

相反,如果你有这样的东西

$blog_id = $_GET['blogid'];

那么你的代码是不安全的并且对 MySQL 注入开放。在这种情况下,您应该使用可以包括的准备好的语句?和绑定参数。您可以使用 mysqli 或 PDO 来执行此操作。我更喜欢PDO。

于 2015-06-10T06:22:40.493 回答
1

这似乎容易受到 SQL 注入的影响。您必须检查 $id 是否仅包含对您的 ID 有效的字符,即没有分号或 SQL 关键字

于 2015-06-10T06:23:16.890 回答
1

实际上:此代码是安全的。为什么?它不需要任何用户输入。所以没有什么可以修改的。

虽然这没有意义,但这里没有办法执行 SQL 注入。一旦您使用 POST、GET 或 Cookie,您必须验证传入的信息。您可以使用PDO::bind_param,filter_var()htmlspecialchars()

于 2015-06-10T06:24:54.467 回答
1

如果变量 $blog_id 无法更改(如您的问题所示),您可以说这是安全的。然而,建议始终使用准备好的语句来防止 sql 注入。

更多信息可以在http://php.net/manual/en/pdo.prepared-statements.php找到

于 2015-06-10T06:36:57.600 回答