我正在尝试创建评论系统。我正在使用php-OEmbed课程和HTML Purifier。我可以使用什么过滤器来确保将注释安全地插入到我的数据库中?我知道你可以使用PHP过滤器,例如FILTER_SANITIZE_STRING,但这些不会将HTML变成实体吗?
此外,如果您使用类似WMD editor的内容,那么您是否也必须在客户端使用某些内容(例如PHP Markdown)以确保它是安全的?
答案 0 :(得分:2)
基本上,无论何时将用户输入发送到某处,都需要清理用户输入。
当您将其放入数据库时,您需要通过引用SQL特殊字符来防止SQL注入(准备好的语句将为您执行此操作)。当您将其发送到浏览器时,您需要转义HTML特殊字符(PHP具有执行此操作的功能)以防止脚本注入。
也可能有其他地方需要转义特殊字符。例如,如果您将注释发送到服务器上的Bash脚本以执行某种处理。在这种情况下,您需要引用或转义特定于Bash的特殊字符。
在错误的阶段不引用/转义是很重要的:例如,当你将HTML实体放入数据库时,不要转义它,除非你完全确定你正在做什么。当你将数据库从数据库中拉出并准备将其发送到浏览器时,如果在数据库连接失败时发送错误消息(这可能会导致XSS漏洞),则很容易意外地逃避事情)。你最后一刻逃脱了,你很可能会避免这些陷阱。
答案 1 :(得分:1)
您不需要使用任何过滤器进行SQL注入。一个更好的解决方案是使用prepared statements。例如,PDO提供PDOStatement。