【发布时间】:2011-08-09 18:57:08
【问题描述】:
我有一个带有 textarea 元素的 asp.net 表单(成员配置文件的一部分 - 目标字段)。我不介意用户在那里输入 html 标签,但是出于安全原因,asp.net 不允许在文本框中提交 html 标签(),这很好。所以,我看到了两个选项——在提交表单之前从 textarea 的值中完全去除 html 标签,或者在提交到服务器之前转义 textarea 的值,用&lt; 和&gt; 替换< 和>。
换句话说,如果有人在文本区域中键入以下内容:
我想以某种方式将其保存在服务器上,并在用户下次在该页面上键入时完全显示给用户。
此类问题通常如何处理?
更新:默认情况下,Asp.net 不允许您在 input/textarea 元素中提交标签。如果我禁用该检查,我就会打开 XSS 漏洞利用的可能性。我想要的只是找到一种正确的方法来转义输入(并分配回元素),然后能够在表单加载后取消转义
【问题讨论】:
-
这是网络表单还是 MVC?
-
这取决于您是否希望在内容中包含 HTML。如果是这样,避免他们进入并避免它出来。如果你不想要 HTML,那么在提交给数据库之前把它们去掉。
-
不要在输入时转义,但在输出时。您可以安全地将文本发送到服务器(正确编码,但在使用“标准”表单 POST 时应该自动完成)并将用户的输入保存在数据库中(当然,要注意 SQL 注入)。在输出文本时将有问题的字符正确转换为 HTML 实体,至少
<、>和&(也许还有其他)。我无法为您提供答案,因为我根本不习惯 ASP.net。顺便说一句,从不去掉标签,因为你还不如破坏a<c^2&b>3之类的东西。 -
@Marcel:
a<c^2&b>3有什么危险? -
如果你直截了当地去掉
<…>之间的所有内容,你会将该字符串更改为a3。
标签: javascript asp.net escaping textarea xss