【发布时间】:2013-02-04 17:07:23
【问题描述】:
我目前正在努力确保为我正在处理的 Web 应用程序提交到数据库中的文本在提交到数据库之前经过适当的清理,然后正确检索和显示。
忽略当前正在使用的杂乱无章的消毒功能(目前是一团糟并且破坏了东西),这就是我打算做的事情:
使用 CKEditor 进行文本输入。它会自动将 HTML 标记/符号转换为它们的 HTML 实体。
利用 PDO 准备语句将文本提交到数据库。
这足以正确清理输入吗?我一直在阅读这方面的内容,很多人说要使用魔术引号,但是我读到魔术引号很旧,并且大多数人建议不要使用它。
提前感谢您的帮助!
【问题讨论】:
-
1.这很好,但是在使用站点正确使用数据(即在发出 HTML 时进行编码); 2. Prepared statements 消除了 SQL 注入,但它们不消除了在其他地方不正确地使用数据(例如 XSS、HTML、exec 注入)。魔术引号是一个坏主意,它尝试过——但失败了——修复 #2 的地址。应该对业务规则进行“清理”,但要确保信息的正确性,而不是 [必要] 数据注入观点。
-
@pst 所以我应该按照其他人所说的去做,并在从数据库输出输入时使用 htmlspecialchars?这会干扰 CKEditor 用它们的实体替换 HTML 标签/符号吗?
-
是的,总是编码输出! (除非有一个真的很好的理由不这样做。)我个人不编码输入。否则,数据库中会出现一团 .. junk .. 。存储它应该的信息。虽然将“富文本”编辑器的内容转换为规范化格式(例如 markdown/markup/bbcode)可能是有意义的,但我不建议将其存储为“html 编码”,因为数据库不关心 HTML。但是,业务规则可能规定只允许使用
<em>和<a>元素 - 现在应该强制执行 this,因为它是信息的部分。
标签: php database pdo ckeditor sanitization