PDO准备好的报表有多安全
不久前开始使用PDO准备好的语句,并且据我所知,它为您完成所有转义/安全性。
例如,假设$ _POST ['title']是一个表单字段。
$title = $_POST['title'];
$query = "insert into blog(userID, title) values (?, ?)"
$st = $sql->prepare($query);
$st->bindParam(1, $_SESSION['user']['userID'], PDO::PARAM_INT);
$st->bindParam(2, $title);
$st->execute();
这真的很安全吗? 我还需要做其他什么吗? 我还有什么需要考虑的?
谢谢。
严格来说,实际上不需要转义,因为参数值永远不会插入到查询字符串中。
查询参数的工作方式是当您调用prepare()
时将查询发送到数据库服务器,并且稍后在调用execute()
时发送参数值。 因此它们与查询的文本形式保持分离。 从来没有机会进行SQL注入(提供的PDO::ATTR_EMULATE_PREPARES
为false)。
所以是的,查询参数可以帮助您避免这种安全漏洞。
他们100%是否能够抵御任何安全漏洞? 不,当然不。 您可能知道,查询参数只取代SQL表达式中的单个文字值。 您不能使用单个参数替代值列表,例如:
SELECT * FROM blog WHERE userid IN ( ? );
您不能使用参数来创建表名称或列名称动态:
SELECT * FROM blog ORDER BY ?;
您不能使用任何其他类型的SQL语法的参数:
SELECT EXTRACT( ? FROM datetime_column) AS variable_datetime_element FROM blog;
因此,在prepare()
调用之前,有不少情况需要将查询作为字符串进行操作。 在这些情况下,您仍然需要仔细编写代码以避免SQL注入。
从SQL注入安全。
一些事情是不安全的:
安全性不仅仅是防止SQL注入。
关于SQL注入,我相信这是最安全的,特别是如果你使用像PDO :: PARAM_INT这样的常量。
链接地址: http://www.djcxy.com/p/93653.html