2010-12-05 61 views
0

我正在试验创建评论系统。我正在使用php-OEmbed类和HTML Purifier。我可以使用什么过滤器来确保评论可以安全地插入到我的数据库中?我知道你可以使用诸如FILTER_SANITIZE_STRING之类的PHP过滤器,但是不会将HTML变成实体吗?确保评论安全

另外,如果您使用类似WMD editor之类的东西,那么您是否还必须在客户端使用某些东西(如PHP Markdown)以确保它是安全的?

回答

2

基本上你需要清理用户输入,无论你何时发送它。

当你把它放到你的数据库中时,你需要通过引用SQL特殊字符来防止SQL注入(预处理语句会为你做这件事)。当你将它发送到浏览器时,你需要转义HTML特殊字符(PHP有这样做的功能)以防止脚本注入。

也可能有其他地方需要转义特殊字符。例如,如果您将注释发送到服务器上的Bash脚本以执行某种处理。在这种情况下,您需要引用或转义Bash特定的特殊字符。

重要的是不要在错误的阶段引用/转义:例如,除非您完全确定自己在做什么,否则在将其放入数据库时​​不要转义HTML实体。如果数据库连接失败时发送错误消息(这可能会导致XSS漏洞),将数据从数据库中拉出并准备将其发送到浏览器时,或者在发送错误消息时根本无法转义)。在最后时刻逃脱,你很可能会避免这些陷阱。

1

您不需要为SQL注入使用任何过滤器。最好的解决方案是使用prepared statements。例如,PDO提供PDOStatement

+0

我忘了添加,我使用的是基于PDO的redbean。 – jonnnnnnnnnie 2010-12-05 02:32:01