在textarea中显示未经过简化的用户输入是否存在风险?

时间:2011-09-21 16:21:43

标签: html security xss sanitization

我按以下顺序保存了两个版本的用户输入:

  1. 不受信任的用户输入原始降价。
  2. 原始降价存储在一个表中。
  3. 原始降价的副本将转换为HTML。
  4. 对HTML进行清理并保留,并根据要求显示。
  5. 原始降价版本仅在用户编辑条目时显示;它被加载到表格的文本区域。
  6. 将原始降价(可能包含不安全的HTML)加载到textarea中是否存在任何风险?它永远不会在textarea之外显示。

    我无法清理markdown,因为它会导致markdown和我正在保存的HTML版本之间出现不一致。

    仅供参考:我总是清理SQL,无论我将哪些内容保存到数据库中。

3 个答案:

答案 0 :(得分:3)

您不必在那里清理它,只需要正确转义HTML特殊字符,例如<和>。

例如,Stackoverflow允许您在帖子中发布HTML代码,它不会删除任何内容。这是通过编码而不是消毒来实现的。

答案 1 :(得分:1)

这取决于你如何将它“加载”到textarea中。如果你通过简单的字符串连接在服务器端进行,例如在php中,

$output = '<textarea>' + $markdown + '</textarea>';

...然后绝对存在风险,因为降价可以非常容易地关闭textarea并嵌入其他任何想要的东西。如果您正在使用某种组件框架(例如,ASP.NET),那么只要您使用安全的API方法(例如MyTextArea.Value = markdown;),就应该受到保护。

如果你在客户端做这件事,那还取决于你是怎么做的。如果你使用像jQuery的.val() setter这样的东西你会很安全,但是仍然可以通过其他方法让自己暴露于XSS漏洞。

简而言之,一般答案是肯定的,具体取决于您实际创建和填充textarea的方式。

答案 2 :(得分:0)

你至少在做SQL卫生吗?当您插入或更新数据时,您是使用某种类型的DAO来逃避SQL,或者,如果使用Java,使用Prepared Statement来设置参数?

在进入数据库之前,您必须始终清理事物。否则人们可能会添加一个迷路

'); --Malicious procedure here.  

..进入请求。

在文本框中留下未经过抽样的输入存在一些安全风险;主要是如果用户感染了注入Javascript的东西,每次都会显示给他或她。

为什么要保存呢?那么你给用户一个完全不一致的视图,从他们输入的内容到显示的内容?他们不会匹配。最好清理输入,以便当用户再次查看输入时,他或她可以清楚地看到为了安全起见删除了违规的HTML。