ASP.NET CoreはUrlFirewallを使用してリクエストをフィルタリング

4168 ワード

一.前言

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();

五.アドレス


ソースコードとDemo:https://github.com/stulzq/UrlFirewall