ASP.NET Core利用UrlFirewall对请求进行过滤的方法示例
一. 前言
UrlFirewall 是一个开源、轻便的对http请求进行过滤的中间件,可使用在webapi或者网关(比如Ocelot),由我本人编写,并且开源在github:https://github.com/stulzq/UrlFirewall (本地下载)
二.UrlFirewall 介绍
UrlFirewall 是一款http请求过滤中间件,可以和网关(Ocelot)搭配,实现屏蔽外网访问内部接口,只让内部接口之间相互通讯,而不暴露到外部。它支持黑名单模式和白名单模式,支持自定义http请求响应代码。具有良好的扩展性,可自己实现验证逻辑,从数据库或者Redis缓存等介质实现对规则的检索。
三.使用
1.从Nuget添加组件到你的ASP.NET Core项目
Install-Package UrlFirewall.AspNetCore
2.配置DI
public void ConfigureServices(IServiceCollection services) { services.AddUrlFirewall(options => { options.RuleType = UrlFirewallRuleType.Black; options.SetRuleList(Configuration.GetSection("UrlBlackList")); options.StatusCode = HttpStatusCode.NotFound; }); services.AddMvc(); //... }
3.配置中间件
UrlFirewall中间件的位置必须放在第一个
public void Configure(IApplicationBuilder app, IHostingEnvironment env) { //Configure url firewall middleware. Top most. app.UseUrlFirewall(); if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } app.UseMvc(); }
4.配置规则
根据步骤2,使用的Section名称・UrlBlackList・我们在appsettings.json/appsettings.Devolopment.json文件中添加以下配置;
{ "Logging": { "IncludeScopes": false, "LogLevel": { "Default": "Debug", "System": "Information", "Microsoft": "Information" } }, "UrlBlackList": [ { "Url": "/api/cart/add", "Method": "All" }, { "Url": "/api/cart/del", "Method": "Post" }, { "Url": "/api/cart/list", "Method": "Get" }, { "Url": "/api/product/*", "Method": "All" } ] }
Url 字段表示要拦截的http请求url,支持通配符*和?,*表示匹配任意个数任意字符,?表示匹配一个任意字符。Method表示http请求方法,All代表所有,还有Get Post Delete Put。
四.扩展
如果你想要实现自己的验证逻辑,或者从数据库、Redis缓存等介质查询、获取数据来进行验证;你可以实现IUrlFirewallValidator接口,然后调用AddUrlFirewallValidator方法替换默认实现即可。
示例:
services.AddUrlFirewall(options => { options.RuleType = UrlFirewallRuleType.Black; options.SetRuleList(Configuration.GetSection("UrlBlackList")); options.StatusCode = HttpStatusCode.NotFound; }).AddUrlFirewallValidator<CustomValidator>();
五.地址
源码和Demo:https://github.com/stulzq/UrlFirewall (本地下载)
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对脚本之家的支持。
您可能感兴趣的文章:
- PHP 对特殊字符进行安全过滤的方法与代码示例
- EASBOS根据id获取对象方法来进行过滤字段
- 原生JS实现Ajax通过POST方式与PHP进行交互的方法示例
- AJAX(XMLHttpRequest)进行跨域请求方法详解(二)
- php数据过滤函数与方法示例【转载】
- $.ajax()方法进行网页间传值示例
- AJAX(XMLHttpRequest)进行跨域请求方法详解
- distribute-list分发列表 和 不进行重分发LAS过滤方法area filter-list prefix、database-filter
- Django跨域请求问题的解决方法示例
- AJAX(XMLHttpRequest)进行跨域请求方法详解
- vue keep-alive请求数据的方法示例
- AJAX(XMLHttpRequest)进行跨域请求方法详解(三)
- 采取枚举,form表单请求取值方法示例
- vue.js实现请求数据的方法示例
- 对DataTable进行过滤筛选的一些方法Select,dataview(转载)
- vue2.0设置proxyTable使用axios进行跨域请求的方法
- iOS网络开发:多个异步网络请求结束后再进行某些操作的方法
- AJAX(XMLHttpRequest)进行跨域请求方法详解(一)
- 利用python的socket发送http(s)请求方法示例
- AJAX(XMLHttpRequest)进行跨域请求方法详解(一) 推荐