Skip to Content
DocumentationBackend Çalışma ZamanlarıASP.NET Core (C#)

C# (ASP.NET Core)

Kurumsal Microsoft ortamlarında ProxyTracer'ı doğrudan ASP.NET Core HTTP istek hattına entegre etmek, kötü amaçlı trafiğin yönlendirmeyi, model bağlamayı veya veritabanı sorgularını tetiklemeden önce reddedilmesini sağlar.

Middleware

Bu uygulama, son derece hızlı seri durumdan çıkarma için System.Text.Json kullanır, HttpClient aracılığıyla kesin bir zaman aşımı uygular ve tehdit algılanırsa 403 Forbidden yanıtıyla ardışık düzeni erkenden sonlandırır.

using System; using System.Net.Http; using System.Net.Http.Headers; using System.Text.Json; using System.Text.Json.Serialization; using System.Threading.Tasks; using Microsoft.AspNetCore.Http; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Logging; namespace ProxyTracer.Security { public class ProxyTracerMiddleware { private readonly RequestDelegate _next; private readonly HttpClient _httpClient; private readonly ILogger<ProxyTracerMiddleware> _logger; private readonly string _apiKey; public ProxyTracerMiddleware(RequestDelegate next, IConfiguration config, ILogger<ProxyTracerMiddleware> logger) { _next = next; _logger = logger; _apiKey = config["PROXYTRACER_API_KEY"] ?? throw new ArgumentNullException("PROXYTRACER_API_KEY is missing"); // Kesin 500ms zaman aşımlı yeniden kullanılabilir istemci _httpClient = new HttpClient { Timeout = TimeSpan.FromMilliseconds(500) }; } public async Task InvokeAsync(HttpContext context) { // 1. IP'yi çıkarın (Program.cs dosyasında app.UseForwardedHeaders() yapılandırması gerektirir) var ip = context.Connection.RemoteIpAddress?.ToString(); // Yerel geliştirme IP'lerini atlayın if (!string.IsNullOrEmpty(ip) && ip != "127.0.0.1" && ip != "::1") { try { // 2. ProxyTracer API'sini asenkron olarak sorgulayın using var request = new HttpRequestMessage(HttpMethod.Get, $"https://api.proxytracer.com/v1/check/{ip}"); request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", _apiKey); using var response = await _httpClient.SendAsync(request); if (response.IsSuccessStatusCode) { using var jsonStream = await response.Content.ReadAsStreamAsync(); var ptResponse = await JsonSerializer.DeserializeAsync<ProxyTracerResult>(jsonStream); // 3. Proxy/VPN tespit edilirse bağlantıyı kesin if (ptResponse != null && ptResponse.Proxy) { context.Response.StatusCode = StatusCodes.Status403Forbidden; context.Response.ContentType = "application/json"; await context.Response.WriteAsync("{\"error\": \"Access Denied: VPN or Proxy detected.\"}"); return; // İstek akışını (pipeline) erkenden sonlandırır } } } catch (Exception ex) { // Fail open: Hatayı günlüğe kaydedin ve isteğin geçmesine izin verin _logger.LogWarning($"ProxyTracer validation failed: {ex.Message}"); } } // 4. Trafik temiz, controller'lara devam edin await _next(context); } // Tam olarak {"proxy": true|false} yanıtına eşlenen hafif struct private class ProxyTracerResult { [JsonPropertyName("proxy")] public bool Proxy { get; set; } } } }

Yapılandırma:

Korumayı etkinleştirmek için middleware'i Program.cs dosyanıza kaydedin. UseForwardedHeaders metodundan sonra, ancak UseRouting ve UseAuthentication metodlarından önce yerleştirildiğinden emin olun.

var app = builder.Build(); // 1. Bir NGINX/Cloudflare yük dengeleyicisinin arkasındaysanız gerçek IP'lerin çıkarıldığından emin olun app.UseForwardedHeaders(); // 2. Kötü niyetli trafiği erkenden düşürün app.UseMiddleware<ProxyTracer.Security.ProxyTracerMiddleware>(); app.UseRouting(); app.UseAuthentication(); app.UseAuthorization(); app.MapControllers(); app.Run();
Son güncelleme tarihi