【问题标题】:Sanitizing input that will later appear in HTML清理稍后将出现在 HTML 中的输入
【发布时间】:2011-04-30 01:04:37
【问题描述】:

我有一个<textarea>,它的值被发送到服务器并存储在数据库中。这个值随后会在 HTML 的不同页面上呈现。

我需要做些什么来清理它?只需删除 HTML 标签? (它已经是 SQL 注入安全的,因为我使用的是存储过程和参数。)

有人有消毒程序吗?

【问题讨论】:

  • 通常,您的服务器端脚本的 STL 中有大量的消毒剂。不要尝试自己编写!您使用什么语言?
  • 这取决于你渲染它的上下文。如果你在引号标签内渲染它,比如某个链接元素的'title'属性,它需要以不同的方式进行转义,如果你正在渲染它直接在体内。你能澄清你在哪里渲染它吗?此外,正如 Martin 所说,您的框架将具有针对给定场景进行转义的功能。比如.NET有HtmlAttributeEncode等

标签: javascript html sanitize


【解决方案1】:

不要清理输入。而是在输出时对其进行编码。这很容易通过 .net 4 功能 () 或通过代码审查来实施。

数据应以其本机格式存储。人类可读文本的原生格式只是文本,而不是它的某种编码版本。您不能轻易地操作编码文本(比如突出显示单词或替换)。

不在数据库中编码文本甚至节省了一点存储空间。

无论如何,清理输入都很困难。除了对所有内容进行编码之外,很难做更多的事情。将 HTML 标签列入黑名单是一种忘记某些事情的方式,所以不要这样做。

【讨论】:

  • +1 因为我认为您只是建议提问者在存储到数据库之前不要对他们的数据进行 HTML 清理。
  • 这将节省您的存储空间,因为您存储了实际输入。当你输出它时,你让它稍微大一点,以便安全地显示在 html 中,如下所示:stackoverflow.com/a/2794366/985511
【解决方案2】:

要么完全删除标签,要么用它们的 HTML 实体 (<) 替换任何特殊字符,例如 <>。无论您使用什么服务器端语言,都可能已经具备执行此操作的功能。例如,PHP 的 htmlspecialcharsstrip_tags 就可以解决问题。

【讨论】:

  • 小心 strip_tags:在许多情况下,如果您在输入中输入
猜你喜欢
  • 1970-01-01
  • 2011-07-27
  • 2010-12-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-16
  • 1970-01-01
  • 2011-12-10
相关资源
最近更新 更多