比方说,我有以下准备好的声明:
$sth = $dbh->prepare('SELECT `name` FROM `user` WHERE `user_id` = :user_id');
Run Code Online (Sandbox Code Playgroud)
我可以像这样绑定user_id参数:
$sth->bindValue(':user_id', $user_id_value);
Run Code Online (Sandbox Code Playgroud)
我仍然可以安全地接受SQL注入.
但是,bindValue()也是一个名为data_type的可选参数,它允许您设置显式数据类型.例:
$sth->bindValue(':user_id', $user_id_value, PDO::PARAM_INT);
Run Code Online (Sandbox Code Playgroud)
这允许我声明user_id将是一个整数.
我的问题是:为什么在使用或不使用SQL注入时可以安全地使用bindValue中的data_type参数?是否有强制数据完整性?如果您事先验证了数据,是否需要担心使用它?使用它还有其他任何我没想过的好处吗?
Ian*_*ood -1
基本上 - 是的。强制执行 data_types 是一件好事。
不要假设可以防止注入 - 很久以前,我看到一篇博客文章详细介绍了使用 utf8 代码进行反引号和引号以及诸如此类的注入;虽然没有转义,但它被评估为单个字符,因此允许注入。
这并不是说这个问题没有得到解决,也不是说你很脆弱——只是说假设有时不是最好的事情......
| 归档时间: |
|
| 查看次数: |
437 次 |
| 最近记录: |