Tra*_*vis 7 php mysqli sql-injection prepared-statement
我目前正在使用mysqli php扩展.
传统上我使用mysqli_real_escape_string来逃避用户输入.但是,我正在考虑更改代码(希望尽可能少的步骤)来使用预准备语句.
我想明确这一点 - 假设我使用预处理语句来绑定我的所有变量,我可以确信sql注入是不可能的吗?(并完全免除mysqli_real_escape_string?)
谢谢
如果正确绑定所有变量,则可以显着降低SQL注入的风险.如果您动态创建SQL,仍然可以获取SQL注入,例如:
'SELECT * FROM ' . $tablename . ' WHERE id = ?'
Run Code Online (Sandbox Code Playgroud)
但如果你避免这样的事情,你就不会有问题.
说到安全性,如果正确绑定或格式化变量,两种方法之间没有区别.
绑定只是更简单,因为它可以只用于任何情况,而转义不能(所以,你必须转换一些变量而不是转义/引用).
另外,请记住,没有绑定或转义可以使标识符安全.因此,如果必须在查询中使用字段名称或运算符,则必须在脚本中使用硬编码的值.
| 归档时间: |
|
| 查看次数: |
3757 次 |
| 最近记录: |