1

在我的 CakePHP 博客中,我希望用户能够添加类似的 HTML 添加,就像您可以在 StackOverflow 上插入一样,即换行符、链接、粗体、列表等。但我有点不确定我将如何解决这个问题是最实用的,同时在用户提交的帖子中保持对恶意代码的保护。

  • 实际上,将帖子保存在 TEXT 数据库字段中并允许其中包含一些 HTML 是最方便的吗?
  • 如果我在帖子中允许一些 HTML 代码,我如何确保我只允许非恶意的基本 HTML 代码,同时清除其余代码?
  • 我应该以某种方式使用 CakePHP Sanitize 类吗?
  • FormHelper 会清除所有 HTML 用户输入吗?
  • 我假设我必须使用 JavaScript 来帮助用户生成正确的代码?
4

2 回答 2

0

对您允许的 HTML 标记使用白名单。首先 HTML 编码所有内容,然后解码您允许的特定标签。

一个基本的例子:

function encodeForOutput(s) {
  s = s.replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/"/g, '&quot;').replace(/&/g, '&amp;');
  // allow <b>
  s = s.replace(/&lt;b&gt;(.*?)&lt;/b&gt;/$, '$1');
  return s;
}
于 2012-10-05T11:14:34.973 回答
0

如果它不适合开发人员,您是否考虑过像 TinyMCE 这样的所见即所得插件?

http://www.tinymce.com/

http://bakery.cakephp.org/articles/galitul/2012/04/11/helper_tinymce_for_cakephp_2

至于安全性,白名单是最安全的方法。应该避免列入黑名单,因为您无法处理所有可以用来绕过它们的技巧(例如,通过十六进制传递文本等)。

TinyMCE 允许您指定白名单: http ://www.tinymce.com/wiki.php/Configuration:valid_elements

于 2012-10-06T01:07:05.797 回答