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