Unsafe Consumption of APIs
Udviklere har en tendens til at stole mere på data modtaget fra tredjeparts-API'er end på brugerinput, og derfor anvender de ofte svagere sikkerhedsstandarder. For at kompromittere API'er går angribere efter integrerede tredjepartstjenester i stedet for at forsøge at kompromittere selve mål-API'en direkte.
For at løse sårbarheder med Unsafe Consumption of API's lan man:
- Kryptér interaktion med andre API'er via en ubeskyttet kanal
- Validerer og Saniterer Ikke Data Hentet Fra Andre API'er
- Ikke følge omdirigeringer blindt
- Begræns antallet af ressourcer tilgængelige til behandling af tredjeparts API-svar
Kryptér interaktion med Andre API'er via en ubeskyttet kanal
API'er bør altid bruge krypteret kommunikation (TLS/SSL) for at sikre, at følsomme data er beskyttet under transmission. Ubeskyttede kanaler efterlader data sårbare overfor aflytning og "man-in-the-middle"-angreb.
Copy code
// Eksempel på en usikker API-anmodning (ukrypteret HTTP)
var httpClient = new HttpClient();
var response = await httpClient.GetAsync("http://api.thirdparty.com/data");
// Usikker, HTTP
// Sikker API-anmodning ved brug af HTTPS
var secureHttpClient = new HttpClient();
var secureResponse = await secureHttpClient.GetAsync("https://api.thirdparty.com/data");
// Sikker, HTTPS
Hvor Det Bruges i En Microservice Arkitektur
I en microservice arkitektur interagerer hver service muligvis med eksterne API'er til databerigelse eller tredjepartstjenester. Ved at sikre, at alle interne servicekommunikation bruger HTTPS, garanteres det, at alle data forbliver sikre under overførsel, hvilket reducerer risikoen for datalæk.
Validerer og Saniterer Ikke Data Hentet Fra Andre API'er
Når data hentes fra eksterne API'er, er det nødvendigt at validere og sanitere dataene, før de bruges, for at forhindre angreb som SQL-injektion, XSS eller andre former for ondsindet datamanipulation.
// Eksempel på ikke-valideret input fra et tredjeparts API
var unsafeData = await GetDataFromApi("https://thirdparty.com");
// Farlig operation med usanitiseret input
var query = $"SELECT * FROM users WHERE username = '{unsafeData}'";
// Risiko for SQL-injektion
// Korrekt validering og sanitering
if (IsValid(unsafeData))
{
var sanitizedData = SanitizeInput(unsafeData);
var query = $"SELECT * FROM users WHERE username = '{sanitizedData}'";
// Sikker
}
Hvor Det Bruges i En Microservice Arkitektur
I microservices interagerer tjenester ofte med flere tredjeparts API'er for at hente data. Tjenesten, der forbruger disse data, skal validere og sanitere input, før de sendes videre til nedstrømskomponenter som databaser eller andre tjenester for at forhindre sikkerhedssårbarheder.
Ikke følge omdirigeringer blindt
At følge omdirigeringer blindt kan føre til, at følsomme data bliver eksponeret for ondsindede tredjepartstjenester, hvis mål-API'ens omdirigeringer er kompromitteret. Det er vigtigt at begrænse de domæner og URL'er, som omdirigeringer kan pege på.
Copy code
// Usikker håndtering af omdirigeringer
var client = new HttpClient();
var response = await client.GetAsync("https://trustedservice.com");
var redirectUrl = response.Headers.Location;
var redirectedResponse = await client.GetAsync(redirectUrl);
// Potentielt usikker
// Sikker håndtering af omdirigeringer med validering
var allowedRedirects = new List<string> { "https://trustedservice.com", "https://anothertrustedservice.com" };
if (allowedRedirects.Contains(response.Headers.Location.ToString()))
{
var redirectedResponse = await client.GetAsync(redirectUrl);
// Sikker, tilladt omdirigering
}
else
{
throw new InvalidOperationException("Omdirigerings-URL er ikke tilladt");
}
Hvor Det Bruges i En Microservice Arkitektur
Microservices, der interagerer med tredjeparts API'er, kan modtage svar, der involverer omdirigering. Det er kritisk at sikre, at omdirigeringerne peger på betroede domæner for at forhindre, at følsomme data sendes til ondsindede servere.
Begræns Antallet af Ressourcer Tilgængelige til Behandling af Tredjeparts API-svar
Ved at begrænse antallet af ressourcer, der er tilgængelige til at behandle svar fra tredjeparts API'er, kan man forhindre angreb som DoS (Denial of Service) eller udnyttelse af systemressourcer.
// Usikker håndtering af API-svar
var response = await httpClient.GetAsync("https://thirdparty.com/large-response");
var data = await response.Content.ReadAsStringAsync();
// Potentielt stor data
// Sikker håndtering ved at begrænse ressourcer
var maxResponseSize = 1024;
var data = await ReadWithLimit(response.Content, maxResponseSize);
async Task<string> ReadWithLimit(HttpContent content, int maxSize)
{
using (var stream = await content.ReadAsStreamAsync())
{
var buffer = new byte[maxSize];
var bytesRead = await stream.ReadAsync(buffer, 0, maxSize);
return Encoding.UTF8.GetString(buffer, 0, bytesRead);
}
}
Hvor Det Bruges i En Microservice Arkitektur
Når en microservice forbruger et tredjeparts API, kan svaret være stort. Det er vigtigt at sætte grænser for svarets størrelse for at forhindre overdreven brug af systemressourcer og potentielle DoS-angreb.