如何正确处理 textarea 中的 html 标签
Posted
技术标签:
【中文标题】如何正确处理 textarea 中的 html 标签【英文标题】:How to correctly handle html tags in textarea 【发布时间】:2011-08-09 18:57:08 【问题描述】:我有一个带有 textarea 元素的 asp.net 表单(成员配置文件的一部分 - 目标字段)。我不介意用户在那里输入 html 标签,但是出于安全原因,asp.net 不允许在文本框中提交 html 标签(),这很好。所以,我看到了两个选项——在提交表单之前从 textarea 的值中完全去除 html 标签,或者在提交到服务器之前转义 textarea 的值,用<
和>
替换<
和>
。
换句话说,如果有人在文本区域中键入以下内容:
我想以某种方式将其保存在服务器上,并在用户下次在该页面上键入时完全显示给用户。
此类问题通常如何处理?
更新:默认情况下,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
。
【参考方案1】:
通常的方法是客户端和服务器端验证:
Anti-Cross Site Scripting Library for ASP.net Making HTML safer: details for toStaticHTML Differences Between AntiXss.HtmlEncode and HttpUtility.HtmlEncode Methods javascript Attack/Defend Microsoft Web Protection Library【讨论】:
以上是关于如何正确处理 textarea 中的 html 标签的主要内容,如果未能解决你的问题,请参考以下文章
在 React 中的光标位置从 select 添加一个名称标签到 textarea