如何正确处理 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 标签的主要内容,如果未能解决你的问题,请参考以下文章

textarea的换行符处理以及正确的在Html中显示

在 React 中的光标位置从 select 添加一个名称标签到 textarea

textarea去掉右下角斜杠标

vue textarea空格和换行处理

如何停止 IE 呈现插入到 textarea 中的 HTML

如何从 textarea 中的 @foreach 循环呈现 html