我正在解析一个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注入。一旦您使用POST、GET或Cookies,您必须验证传入的信息。您可以使用PDO::bind_param
、filter_var()
或htmlspecialchars()
您应该为您的sql使用准备好的语句,因为您从url插入一些值,这些值可能被操纵并破坏您的数据库
这似乎容易受到SQL注入。你需要检查$id只包含对你的id有效的字符,并且没有分号或SQL Keywords
如果变量$blog_id不能更改(如您的问题所示),您可以说这是安全的。然而,建议始终使用准备好的语句来防止sql注入。
更多信息请访问http://php.net/manual/en/pdo.prepared-statements.php
您的代码显示您不是从URL获取值,而是使用
将值5硬编码到变量中$blog_id = 5;
如果你有这样的东西
$blog_id = $_GET['blogid'];
,那么你的代码是不安全的,并开放给MySQL注入。在这种情况下,你应该使用准备好的语句,其中可以包括?和bindParam。您可以使用mysqli或PDO来完成此操作。我更喜欢PDO