XSS攻击全称跨站脚本攻击,是为不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS,XSS是一种在web应用中的计算机安全漏洞,它允许恶意web用户将代码植入到提供给其它用户使用的页面中。

比如我们在表单提交的时候插入脚本代码

如果不进行处理,那么就是这种效果,我这里只是演示一个简单的弹窗

下面给大家分享一下我的解决方案。

需要用到这个库:HtmlSanitizer

https://github.com/mganss/HtmlSanitizer

新建一个过滤类。

    public class  XSS
{
private HtmlSanitizer sanitizer;
public XSS()
{
sanitizer = new HtmlSanitizer();
//sanitizer.AllowedTags.Add("div");//标签白名单
sanitizer.AllowedAttributes.Add("class");//标签属性白名单,默认没有class标签属性
//sanitizer.AllowedCssProperties.Add("font-family");//CSS属性白名单
} /// <summary>
/// XSS过滤
/// </summary>
/// <param name="html">html代码</param>
/// <returns>过滤结果</returns>
public string Filter(string html)
{
string str = sanitizer.Sanitize(html);
return str;
}
}

新建一个过滤器

    public class FieldFilterAttribute : Attribute,IActionFilter
{
private XSS xss;
public FieldFilterAttribute()
{
xss = new XSS();
} //在Action方法之回之后调用
public void OnActionExecuted(ActionExecutedContext context)
{ } //在调用Action方法之前调用
public void OnActionExecuting(ActionExecutingContext context)
{
//获取Action参数集合
var ps = context.ActionDescriptor.Parameters;
//遍历参数集合
foreach (var p in ps)
{
if (context.ActionArguments[p.Name] != null)
{
//当参数等于字符串
if (p.ParameterType.Equals(typeof(string)))
{
context.ActionArguments[p.Name] = xss.Filter(context.ActionArguments[p.Name].ToString());
}
else if (p.ParameterType.IsClass)//当参数等于类
{
ModelFieldFilter(p.Name, p.ParameterType, context.ActionArguments[p.Name]);
}
} }
} /// <summary>
/// 遍历修改类的字符串属性
/// </summary>
/// <param name="key">类名</param>
/// <param name="t">数据类型</param>
/// <param name="obj">对象</param>
/// <returns></returns>
private object ModelFieldFilter(string key, Type t, object obj)
{
//获取类的属性集合
//var ats = t.GetCustomAttributes(typeof(FieldFilterAttribute), false); if (obj != null)
{
//获取类的属性集合
var pps = t.GetProperties(); foreach (var pp in pps)
{
if(pp.GetValue(obj) != null)
{
//当属性等于字符串
if (pp.PropertyType.Equals(typeof(string)))
{
string value = pp.GetValue(obj).ToString();
pp.SetValue(obj, xss.Filter(value));
}
else if (pp.PropertyType.IsClass)//当属性等于类进行递归
{
pp.SetValue(obj, ModelFieldFilter(pp.Name, pp.PropertyType, pp.GetValue(obj)));
}
} }
} return obj;
}
}
    //属性过滤器
[FieldFilter]
public class NoteBookController : ManageController
{
//笔记操作接口
private INoteBookAppService _noteBookApp;
public NoteBookController(INoteBookAppService noteBookApp)
{
this._noteBookApp = noteBookApp;
}
public IActionResult Tab()
{
return View();
} }

然后在需要过滤的控制器加上过滤控制器特性就可以了。这样所有string类型的参数就都会进行过滤了。如果不需要对整个控制器进行过滤,只需要在相应的Action加上特性。

最后 点个赞吧。

.net core xss攻击防御的更多相关文章

  1. XSS攻击防御篇

    前言   上篇文章中提到了 XSS 攻击,而且,也从几个方面介绍了 XSS 攻击带来的严重影响.那么,这篇文章中,主要是针对 XSS 攻击做一个基本的防御,看看可以通过几种方式来修复这个特别常见的安全 ...

  2. .Net Core 项目中添加统一的XSS攻击防御过滤器

    一.前言 最近公司内部在对系统的安全进行培训,刚好目前手里的一个.net core 项目中需要增加预防xss的攻击,本文将大概介绍下何为XSS攻击以及在项目中如何统一的预防XSS攻击. 二.XSS简介 ...

  3. MVC WEB安全——XSS攻击防御

    XSS(跨站脚本攻击) 描述: 原理:攻击者往Web页面里插入恶意代码,当用户浏览该页之时,嵌入其中Web里面的代码会被执行,从而达到攻击用户的特殊目的. 类别: 1)被动注入(Passive Inj ...

  4. XSS 攻击实验 & 防御方案

    XSS 攻击&防御实验 不要觉得你的网站很安全,实际上每个网站或多或少都存在漏洞,其中xss/csrf是最常见的漏洞,也是最容易被开发者忽略的漏洞,一不小心就要被黑 下面以一个用户列表页面来演 ...

  5. 前端XSS攻击和防御

    xss跨站脚本攻击(Cross Site Scripting),是一种经常出现在web应用中的计算机安全漏洞,指攻击者在网页中嵌入客户端脚本(例如JavaScript), 当用户浏览此网页时,脚本就会 ...

  6. Jsoup代码解读之六-防御XSS攻击

    Jsoup代码解读之八-防御XSS攻击 防御XSS攻击的一般原理 cleaner是Jsoup的重要功能之一,我们常用它来进行富文本输入中的XSS防御. 我们知道,XSS攻击的一般方式是,通过在页面输入 ...

  7. 关于Web安全的那些事(XSS攻击)

    概述 XSS攻击是Web攻击中最常见的攻击方法之一,它是通过对网页注入可执行代码且成功地被浏览器执行,达到攻击的目的,形成了一次有效XSS攻击,一旦攻击成功,它可以获取用户的联系人列表,然后向联系人发 ...

  8. web 安全问题(二):XSS攻击

    上文说完了CSRF攻击,本文继续研究它的兄弟XSS攻击. 什么是XSS攻击 XSS攻击的原理 XSS攻击的方法 XSS攻击防御的手段 什么是XSS攻击 XSS攻击全名(Cross-Site-Scrip ...

  9. 155.XSS攻击原理

    XSS攻击: XSS(Cross Site Script)攻击叫做跨站脚本攻击,他的原理是用户使用具有XSS漏洞的网站的时候,向这个网站提交一些恶意代码,当用户在访问这个网站的某个页面的时候,这个恶意 ...

随机推荐

  1. leetCode(寻找峰值)-二分查找

    题目: 峰值元素是指其值大于左右相邻值的元素. 给定一个输入数组 nums,其中 nums[i] ≠ nums[i+1],找到峰值元素并返回其索引. 数组可能包含多个峰值,在这种情况下,返回任何一个峰 ...

  2. Vue + Element UI 实现权限管理系统 前端篇(十三):页面权限控制

    权限控制方案 既然是后台权限管理系统,当然少不了权限控制啦,至于权限控制,前端方面当然就是对页面资源的访问和操作控制啦. 前端资源权限主要又分为两个部分,即导航菜单的查看权限和页面增删改操作按钮的操作 ...

  3. C++ 单例模式实现

    #include <iostream> #include <mutex> std::mutex mtx; class Singleton { private: Singleto ...

  4. [深度学习] 最全优化方法总结比较--SGD,Adagrad,Adadelta,Adam,Adamax,Nadam

    SGD 此处的SGD指mini-batch gradient descent,关于batch gradient descent, stochastic gradient descent, 以及 min ...

  5. rem布局原理深度理解(以及em/vw/vh)

    一.前言 我们h5项目终端适配采用的是淘宝那套<Flexible实现手淘H5页面的终端适配>方案.主要原理是rem布局.最近和别人谈弹性布局原理,发现虽然已经使用了那套方案很久,但是自己对 ...

  6. 命令查看当前电脑安装所有版本.NET Core SKD

    dotnet --version 查看当前使用版本 dotnet --info 安装的所有版本 包括版本地址 也可用命令帮助 dotnet help

  7. Apache SkyWalking的架构设计【译文】

    Apache SkyWalking提供了一个功能强大并且很轻量级的后端.在此,将介绍为什么采用以下方式来设计它,以及它又是如何工作的. 架构图 对于APM而言,agent或SDKs仅是如何使用libs ...

  8. 实现Java Socket 客户端服务端交互实例

    SocketService.java package socket; import java.io.BufferedReader; import java.io.IOException; import ...

  9. Python 多线程、多进程 (三)之 线程进程对比、多进程

    Python 多线程.多进程 (一)之 源码执行流程.GIL Python 多线程.多进程 (二)之 多线程.同步.通信 Python 多线程.多进程 (三)之 线程进程对比.多线程 一.多线程与多进 ...

  10. Docker 启动遇到 Error starting daemon: Error initializing network controller 错误

    docker 版本 1.10.3 一台装有 docker 的机器重启后,没法启动,/var/log/messages 展示如下错误信息: May 17 11:11:14 gziba-hc03 syst ...