并且用户将在屏幕上看到
,因为浏览器将解析 <
实体。也就是说,如果您允许用户发布“原始”HTML,例如此部分以粗体显示
,那么您必须创建允许标签的“白名单”,然后手动替换具有正确 HTML 的 <
例如:
string[] allowedTags = new string[] { "a", "b", "img" };
foreach (allowedTag in allowedTags)
output = output.Replace("<" + allowedTag, "<" + allowedTag);
您是否看过OWASP 指南
最好的方法是拥有一个允许标签的白名单,而不是试图想出一种方法来阻止所有脚本标签。
有关如何执行此操作的一种解决方案,请参见此处如何我是否可以过滤除特定白名单之外的所有 HTML 标记?
但您还需要注意,人们可能通过带有指向其自己服务器的 URL 的图像标签拥有指向外部脚本的链接。请参阅此处 http://ha.ckers.org/xss.html 不同类型的示例您需要防御的攻击
如果您不清理用户在文本框中输入并提交的内容,那么是的,有可能造成伤害。
您可能需要查看Microsoft 反跨站脚本库,因为它旨在帮助开发人员防止此类攻击。
另外值得一看的是 OWASP 的 跨站脚本 (XSS)< /a>
您可能还想研究 HttpUtility.HtmlEncode 和 HttpUtility.HtmlDecode。我刚刚编写了一个快速测试,看起来它可能会解决您在下面的评论中所关心的问题(关于如何以正确的格式向其他用户显示数据):
string htmlString = "<b>This is a test string</b><script>alert(\"alert!\")</script> and some other text with markup <ol><li>1234235</li></ol>";
string encodedString = HttpUtility.HtmlEncode(htmlString);
// result = <b>This is a test string</b><script>alert("alert!")</script> and some other text with markup <ol><li>1234235</li></ol>
string decodedString = HttpUtility.HtmlDecode(encodedString);
// result = <b>This is a test string</b><script>alert("alert!")</script> and some other text with markup <ol><li>1234235</li></ol>
ASP.NET 控件和 HTMLEncode
我本来打算发布我从课堂上获得的信息,但我发现一个链接列出了完全相同的内容(针对 1.1 和 2.0),因此我将发布该链接以便于参考。您可能可以通过查看 MSDN 来获取有关未列出的特定控件(或 3.0/3.5/4.0 版本,如果它们已更改)的更多信息,但这至少应该作为您的快速入门指南。如果您需要更多信息,请告诉我,我会看看能找到什么。
下面是来自 MSDN 博客之一的更全面的列表:哪些 ASP.NET 控件自动编码?
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
I would go with storing it encoded in database, then when showing Decode it and replace only the
<
with<
if you say you need to preserve other things.As far as I know, if you replace the
<
XSS is not really possible as any JS code must be inside<script>
tags to be executed and by replacing, you'll get this in the HTML source:<script>
and the user will see<script>
on the screen as the browser will parse the<
entity.This said, if you allow users to post "raw" HTML e.g.
<b>this section is bolded</b>
then you'll have to create "white list" of allowed tags then manually replace the<
with the proper HTML for example: