Php PDO安全选择
我正在使用此代码段从数据库中读取数据,这是我尝试的:Php PDO安全选择,php,pdo,while-loop,prepare,Php,Pdo,While Loop,Prepare,我正在使用此代码段从数据库中读取数据,这是我尝试的: $sth = $dbh->prepare("SELECT * FROM user"); $sth->execute(); while ($user = $sth->fetch(PDO::FETCH_NUM)) { echo htmlspecialchars($user[1]); } 我希望它不能被入侵使用注射等 你认为这足够好,我是说我用准备好的陈述和 htmlspecialchars() 我忘了什么吗?您显示的
$sth = $dbh->prepare("SELECT * FROM user");
$sth->execute();
while ($user = $sth->fetch(PDO::FETCH_NUM)) {
echo htmlspecialchars($user[1]);
}
我希望它不能被入侵使用注射等
你认为这足够好,我是说我用准备好的陈述和
htmlspecialchars()
我忘了什么吗?您显示的代码部分没有直接的漏洞,因为您没有评估数据库查询中的任何用户输入,因此这不是问题。
$dbh->prepare()
已经为您进行了转义。有一个PDO函数PDO::quote()
可以独立于prepare方法来转义字符串,但正如文档所说:
如果您使用此函数构建SQL语句,则
强烈建议使用PDO::prepare()来准备SQL语句
使用绑定参数,而不是使用PDO::quote()进行插值
用户输入到SQL语句中。有约束力的准备好的陈述
参数不仅更便于携带,更方便,对SQL免疫
注入,但执行速度通常比插值快得多
查询,因为服务器端和客户端都可以缓存已编译的表单
查询的最后一步
从数据库打印内容时,不需要使用
htmlspecialchars()
。逃逸的目的是预防,正如你正确指出的那样。但是这些注入只能在sql语句中发生,并且只有在以下情况下(如Ohgodwhy所述)来自$\u POST
或$\u GET
的用户输入或用户可以操作的任何内容都是您的查询的一部分。此问题似乎与主题无关,因为它属于codereview.stackexchange.comi看了一下:但可能我忘了什么,那么你怎么看呢?SELECT*
是否足够开放资源消费者和注射改进剂:D