我有一个在网址中传递的ID(例如id = 33)。它始终是一个数字。
我曾经使用标准的mysql连接并使用转义字符串和int来实现安全等。
我正在努力进入PDO,我认为下面的代码是安全的(工作正常),但我真的很感激,这里的任何人都可以看看并告诉我,如果我错过了任何/任何建议提高安全性。
$pdo = new PDO($dsn, '*****','*****');
$id = $_GET["id"];
$id = filter_var($id, FILTER_SANITIZE_NUMBER_INT);
if (filter_var($id, FILTER_VALIDATE_INT)) {
$sql = $pdo->prepare("SELECT * FROM table WHERE id = :id LIMIT 1");
$sql->bindParam(":id",$id);
$row = $sql->execute();
$result = $sql->fetch(PDO::FETCH_ASSOC);
}
我认为以上是安全的(使用以下内容来回显数据)是正确的:
<?php echo ($result['colour']);?>
再次提前感谢任何帮助:)
P.S。在附注中,我假设我使用过:
<?php echo ($result['id']);?>
这会将已清理的ID从get语句中拉出来吗?
EDIT 只是为了澄清,没有用户可以访问提交数据(这将全部由我自己通过phpmyadmin完成。他们唯一能看到的是名单列表,点击后它会将他们带到一个页面(在URL中有ID) )显示与名称相关的颜色。
答案 0 :(得分:1)
如果您对使用占位符有规定,则不应该对数据库安全性有任何问题。 PDO将负责妥善逃避事情。请注意,这并不意味着您的查询有效或数据将按预期保存,您可能会遇到截断或转换问题。
请记住,您需要对呈现数据库中存储的数据保持警惕,以避免HTML问题和XSS problems。这需要转义数据以进行演示,例如htmlspecialchars
方法。