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