我正在解析一个 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 或 Cookie,您必须验证传入的信息。您可以使用PDO::bind_param
,filter_var()
或htmlspecialchars()
如果变量 $blog_id 无法更改(如您的问题所示),您可以说这是安全的。然而,建议始终使用准备好的语句来防止 sql 注入。
更多信息可以在http://php.net/manual/en/pdo.prepared-statements.php找到