我正在使用Propel框架与数据库进行通信。当我尝试输入时,我认为它正在使用PDO并生成bindParam()
,因此应该覆盖SQL注入。
但它是否提供额外的安全性,例如strip_tags()
,htmlspecialchars()
或类似内容,还是我应该手动执行此操作?
之前我使用过PDO,所以我知道基础知识,但这是我第一次使用Propel。
答案 0 :(得分:3)
我不希望ORM能够防范XSS攻击。这是一个与数据库层无关的问题(如果你想存储HTML,会导致问题)。
答案 1 :(得分:2)
Propel提供的唯一“安全性”是您提到的参数绑定。如果有人想存储html标签,特殊字符等,那么除此之外的任何事情都可能导致问题。也就是说,如果需要,您可以延长Propel为您做这件事。例如,您可以覆盖类中的setXxxx()
方法:
class Book extends BaseBase {
...
public static function setTitle($v) {
return parent::setTitle(strip_tags($v));
}
...
}
执行上述操作后,您可以在strip_tags()
标题的任何时候执行Book
。由于Propel在任何地方使用setter方法,你应该是好的。当然,您的代码必须在任何地方实际使用该setter以确保它发生。