欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

ASP.NET Core利用UrlFirewall对请求进行过滤的方法示例

程序员文章站 2022-04-10 11:53:08
一. 前言 urlfirewall 是一个开源、轻便的对http请求进行过滤的中间件,可使用在webapi或者网关(比如ocelot),由我本人编写,并且开源在git...

一. 前言

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 (本地下载)

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对的支持。