PDO SQL 注入(从 url 获取变量)
PDO SQL injection (fetching variable from url)
我有一个在 URL 中传递的 ID(例如 id=33)。它总是一个数字。
我曾经使用标准 mysql 连接并使用转义字符串和 int 来确保安全等
我正在尝试转向 PDO,我认为下面的代码是安全的(工作正常),但真的很感激这里的任何人都可以看一下,如果我错过了请告诉我 anything/any 关于提高安全性的建议。
$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 语句中的 ID?
编辑
澄清一下,任何用户都无法提交数据(这一切都将由我自己通过 phpmyadmin 完成。他们唯一会看到的是一个名称列表,单击后会转到一个页面(ID 在 URL) 显示与名称关联的颜色。
如果您在使用占位符方面遵守纪律,那么您的数据库安全性应该不会有任何问题。 PDO 将妥善处理转义问题。请注意,这并不意味着您的查询将有效或数据将按您的预期保存,您可能会遇到截断或转换问题。
请记住,您需要对呈现存储在数据库中的数据保持警惕,以避免 HTML 问题和 XSS problems. This requires escaping data for presentation, for example the htmlspecialchars
方法。
我有一个在 URL 中传递的 ID(例如 id=33)。它总是一个数字。
我曾经使用标准 mysql 连接并使用转义字符串和 int 来确保安全等
我正在尝试转向 PDO,我认为下面的代码是安全的(工作正常),但真的很感激这里的任何人都可以看一下,如果我错过了请告诉我 anything/any 关于提高安全性的建议。
$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 语句中的 ID?
编辑 澄清一下,任何用户都无法提交数据(这一切都将由我自己通过 phpmyadmin 完成。他们唯一会看到的是一个名称列表,单击后会转到一个页面(ID 在 URL) 显示与名称关联的颜色。
如果您在使用占位符方面遵守纪律,那么您的数据库安全性应该不会有任何问题。 PDO 将妥善处理转义问题。请注意,这并不意味着您的查询将有效或数据将按您的预期保存,您可能会遇到截断或转换问题。
请记住,您需要对呈现存储在数据库中的数据保持警惕,以避免 HTML 问题和 XSS problems. This requires escaping data for presentation, for example the htmlspecialchars
方法。