ASP.NET Core XSS攻击

1. 什么是XSS攻击

XSS(Cross-Site Scripting)是一个安全漏洞,黑客可以在用户页面中放脚本(通常JavaScript脚本),当用户加载该页面时黑客的脚本会运行,这时黑客可以窃取cookies和会话的tokens,通过操控DOM来改变网页或者跳转浏览器到另外页面,XSS漏洞通常发生在应用程序的用户输入时没有验证和应用程序输出到页面而没有编码

这篇文章主要应用于ASP.NET Core MVC 或者返回HTML的应用程序,这种类型的应用程序更容易受到XSS攻击,Web API应用以HTML,XML或者JSON形式返回的数据,如果用户没有进行输入验证,也会引发XSS攻击,这取决于客户端应用程序对API的信任程度, 例如:一个API接收用户的输入并且以HTML形式返回结果,攻击者能够注入脚本到内容里面,当响应呈现到用户浏览器时会执行该脚本

2. 例子

我们创建一个项目命名为AspNetCore.XSS,为了方便演示我们使用EF的Memory来存储数据,我们创建一个Blog的功能来管理用户的博客,代码细节我们这里不详细展开,可以到文章最后的github下载,我们添加的博客内容里面包含了<script>脚本

9dc389cda9bfa59c5e0da19d14ef6013.png

浏览器只是显示这段脚本而没有执行它,我们通过浏览器查看一下HTML源码,我们可以看到页面进行了编码,而没有运行脚本

000ef481106bc3233abe6f4ab77e549f.png

进入视图,我们使用下面代码来替换:

@Html.Raw(blog.Body)

再次运行应用程序,我们发现这次浏览器执行了脚本

e11465684e7faea53a381b749610ba95.png

查看浏览器源码发现这次脚本没有被编码

3176d4b002e2cacd389909c433f6a1c8.png

用户输入的数据我们尽量要验证,下面这段代码风险极高:

[HttpGet]
public string GetProfile(string id)
{
    return $"你好,我叫 {id}.";
}

如下所示:

7390935444d33125149037958e9060f8.png

3. 如何防止XSS攻击

XSS攻击本质是通过在页面插入<script>标签或者在HTML元素中插入On*事件来欺骗你应用程序,从而来达到攻击者的目的

(1)对用户输入的数据进行验证,永远不要相信用户输入的数据,包括:表单输入、URL 参数、Cookie、HTTP 头部还是其他途径提供数据

(2) 对输出数据进行编码,例如,将 < 编码为 &lt;  > 编码为 &gt; " 编码为 &quot;

(3) 使用不同类型的编码,在HTML中使用HTML编码,在Javascript中使用Javascript编码

(4) 使用markdown替换HTML的编辑器

(5) 使用CSP(Content Security Policy)配置来定义哪些资源可以加载到您的页面上,限制脚本的来源,从而减少恶意脚本的执行

(6) 向用户普及安全教育

(7) 定期审查和更新应用程序的安全策略,以适应新的安全威胁和最佳实践

ASP.NET Core 中为我们提供了一下辅助类,针对html,javascript和url数据进行编码System.Text.Encodings.Web命名空间中HtmlEncoder和JavaScriptEncoder和UrlEncoder

源代码地址:

https://github.com/bingbing-gui/Asp.Net-Core-Skill/tree/master/Fundamentals/AspNetCore.Security/AspNetCore.XSS

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值