首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么我需要执行html.encode()

为什么我需要执行html.encode()
EN

Stack Overflow用户
提问于 2010-05-27 00:24:18
回答 9查看 2.7K关注 0票数 5

如果我有一个用户在富文本编辑器(微型编辑器)中输入数据,并提交我存储到数据库中的数据,然后检索以在其他动态网页上显示,为什么我需要在这里编码。

是不是因为有人可能会将javascript粘贴到富文本编辑器中?还有其他原因吗?

EN

回答 9

Stack Overflow用户

回答已采纳

发布于 2010-05-27 00:26:51

原因是安全。

最明显/最常见的原因是 (XSS)。事实证明,这是您可能会在站点中看到的安全问题的根本原因。

跨站脚本(XSS)是一种计算机安全漏洞,通常存在于web应用程序中,可让恶意攻击者将客户端脚本插入其他用户查看的网页中。攻击者可以利用利用的跨站点脚本漏洞绕过访问控制,例如同源策略。截至2007年,在赛门铁克记录的所有安全漏洞中,在网站上执行的跨站点脚本攻击大约占80%。1根据易受攻击的站点处理的数据的敏感性和站点所有者实施的任何安全缓解措施的性质,它们的影响可能从轻微的滋扰到重大的安全风险。

另外,如下面的评论所示,你的网站的布局也可能搞砸。

您需要

更多资源

http://forums.asp.net/t/1223756.aspx

票数 16
EN

Stack Overflow用户

发布于 2010-05-27 00:29:35

你犯了一些错误。

如果您从富文本编辑器中接受HTML格式的文本,则不能调用Html.Encode,否则它将对所有的HTML标记进行编码,并且您将看到原始标记而不是格式化文本。

但是,您仍然需要针对XSS进行保护。

换句话说,如果用户输入以下HTML:

代码语言:javascript
复制
<b>Hello!</b>
<script>alert('XSS!');</script>

您希望保留<b>标记,但删除(而不是编码) <script>标记。

类似地,您需要删除内联事件属性(如onmouseover)和Javascript URL(如<a href="javascript:alert('XSS!');>Dancing Bunnies!</a>)

您应该通过严格的XML解析器运行用户的HTML,并在保存内容时维护严格的标记和属性白名单。

票数 3
EN

Stack Overflow用户

发布于 2010-05-27 00:43:40

我认为你混淆了“编码”和“清理”。

如果要接受来自用户的文本,则需要先将其编码为HTML,然后再将其呈现为HTML。通过这种方式,文本

代码语言:javascript
复制
a < b

HTML编码为

代码语言:javascript
复制
a &lt; b

并在HTML浏览器中呈现为(就像用户输入它一样):

代码语言:javascript
复制
a < b

如果您想接受来自用户的超文本标记语言(听起来就像您在本例中所做的那样),那么它已经是超文本标记语言格式的,所以您不想再次调用HTML.Encode。但是,您可能想要擦除它以删除某些不允许的标记(如脚本块)。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2914871

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档