【问题标题】:How to realise safe text editor for editing content如何实现安全的文本编辑器来编辑内容
【发布时间】:2011-07-07 21:50:02
【问题描述】:

网站上有不同的内容,允许创建/编辑 - 新闻、文章等。

如何正确、安全地将数据从编辑器传输到数据库?

我想使用所见即所得的编辑器,因为这个编辑器的潜在用户不会是这样有经验的用户(Markdown 和 BB-code 对他们来说很难,他们想要像 MS Word =)

另外我想给这个编辑器添加一些限制,例如:没有图片,只有5种颜色,只有3种字体等等。(这可以通过这个编辑器的有限控制来完成)

我的问题:如何让这个编辑器更安全?如何防止从用户添加额外的 html 或 <script> 标签。在呈现此内容(新闻或文章)的模板页面时,我是否必须对来自数据库(保存的内容,用户在编辑器中编写的内容)的数据进行 html 过滤?

我应该将内容以 HTML 方式存储在数据库中吗? (如果我想要 wysiwig-editor 并在保存后输出 HTML)。或者我应该将 HTML 从编辑器转换为 bb-code 或 markdown(将我的所有限制和限制)并清除所有额外的 HTML ...然后从数据库获取内容时 - 我应该将 bb-code/markdown 转换为 HTML再次。

或者也许有更简单、更快捷的方法来确保安全?

【问题讨论】:

标签: javascript database wysiwyg


【解决方案1】:

如果您将文本填充到比方说 div 的 innerHTML 中,它允许用户编写 html 并稍后将其显示为 HTML。但是,如果您不想让人们注入 HTML,您可以改用 innerText。 innerText 的工作方式与 innerHTML 类似,但不会命中 HTML 解析器。

如果您打算使用 bb 代码或降价代码,您将解析需要转换的代码的文本,并将其余部分保留为文本。

您还可以使用 regex 解析器将特殊字符转换为 HTML code 等效字符,然后将 bb 代码或降价转换为 html


试试这个:

保存到数据库时: 将已知的格式正确 html 替换为 bb 代码,将 <b> 替换为 [b]。然而,格式错误的 html 将保持键入 <b > 将保持 <b >。然后对所有 HTML 特殊字符(即 )进行正则表达式替换

然后在从数据库中检索时,将 bb 代码替换为 html 即可。

【讨论】:

  • 是的,我了解 innerHTML 和 innerText 之间的区别。但是,如果我使用 innerText 而不是如何显示以 HTML 方式保存在数据库中的数据?...关于使用正则表达式进行 html 解析 - 我听说 - 这是个坏主意...
  • 我所说的使用正则表达式转换“特殊字符”的意思是用它的实体代码替换任何 。这将防止任何书面 html 被用作标记。这将允许您使用 innerHTML 而不必担心注入 HTML。这是一个两步过程。去掉不需要的,然后解析剩下的文本,把bb代码转换成html。
  • 但是使用所见即所得编辑器,我以 html 方式保存我的内容(我有 <br><b> 用于粗体等)。将所有 更改为它们的实体代码会使标记变得无用。我不应该改变所有的 。
  • 分词器怎么样? en.wikipedia.org/wiki/Tokenizer#Tokenizer - 如果您知道您不希望用户使用什么,即 的问题
猜你喜欢
  • 1970-01-01
  • 2017-07-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-26
相关资源
最近更新 更多