这个 php select 语句安全吗?

Is this php select statement secure?

我正在解析一个 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 ?

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

您的代码表明您没有从 URL 中获取值,而是将值 5 硬编码到具有

的变量中
$blog_id = 5;

如果你有这样的东西

$blog_id = $_GET['blogid'];

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

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

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

虽然这没有意义,但无法在此处执行 SQL 注入。使用 POST、GET 或 Cookies 后,您必须验证传入的信息。您可以使用 PDO::bind_paramfilter_var()htmlspecialchars()

来完成此操作

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

可以在 http://php.net/manual/en/pdo.prepared-statements.php

找到更多信息