php – 我应该何时使用预准备语句?
最初我使用
mysql_connect和
mysql_query来做事情.然后我学会了SQL注入,所以我试图学习如何使用预处理语句.我理解PDO类的准备和执行函数如何有助于防止SQL注入.
但是,只有在用户输入存储到数据库中时才需要准备语句.还是可以继续使用mysql_num_rows,因为我真的没有冒这个功能被黑客入侵的风险吗?或者使用预准备语句来执行此操作更安全吗?我应该使用预准备语句来处理涉及使用mysql的所有内容吗?为什么? 我非常感谢任何答案和反馈.谢谢.
TL / DR
总是. 100%的时间,使用它.总是;即使你不需要使用它.使用它仍然. 不推荐使用mysql_ *函数. (Notice the big red box?)
您最好使用 信任用户输入而没有预先准备好的声明/消毒它就像把车停在一个不好的邻居,解锁和点火钥匙.你基本上是在说,只是来吧,带走我的好东西 你永远不应该,我的意思是永远不要相信用户输入.除非你想要这个: 参考数据并存储它,如评论中所述,您永远也不应该信任任何与用户相关的输入.除非您确保用于操作所述数据库/值的数据被硬编码到您的应用程序中,否则您必须使用预准备语句. 现在说明为什么你应该使用预备语句.这很简单.要防止SQL注入,但要以最直接的方式实现.准备好的语句的工作方式很简单,它将查询和数据一起发送,但是分开(如果有意义的话哈哈) – 我的意思是: Prepared Statements Query: SELECT foo FROM bar WHERE foo = ? Data: [? = 'a value here'] 与其前身相比,您使用数据截断查询,将其作为整体发送 – 反过来,这意味着它作为单个事务执行 – 导致SQL注入漏洞. 这是一个伪PHP PDO示例,向您展示预准备语句/绑定的简单性. $dbh = PDO(....); // dsn in there mmm yeahh $stmt = $dbh->prepare("INSERT INTO REGISTRY (name,value) VALUES (:name,:value)"); $stmt->bindParam(':name',$name); $stmt->bindParam(':value',$value); // insert one row $name = 'one'; $value = 1; $stmt->execute(); Taken from PHP Manual for PDO Prepared Statements 更多阅读 > How can I prevent SQL-injection in php? (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |