Hvad er en JSON-injektion, og hvordan forhindrer man den?
JSON (JavaScript Object Notation)er et åbent standardformat for dataudveksling, der bruges til at kommunikere mellem applikationer. JSON ligner XML, men lettere at læse end XML på grund af dens meget lette natur (lille filstørrelse).
JSON blev afledt af JavaScript - programmeringssproget på nettet og verdens mest populære. Dette gør det til det foretrukne dataudvekslingsformat på internettet. Selvom det minder meget om JavaScript-objektets bogstavelige syntaks, kan det bruges uafhængigt af JavaScript, og mange programmeringsmiljøer har evnen til at læse (parse) og generere JSON.
JSON eksisterer som en streng – nyttig, når du vil overføre data på tværs af et netværk. Det skal dog konverteres til et indbygget JavaScript-objekt, når du vil have adgang til dataene. JavaScript giver et globalt JSON-objekt med tilgængelige metoder til at konvertere et native objekt til en streng (serialisering) og konvertere en streng til et native objekt (deserialisering). En JSON-streng kan gemmes i sin egen fil – som dybest set kun er en tekstfil med filtypenavnet .json, og en MIME-type applikation/json – som dybest set er en udvidelse til internet-e-mail-protokollen, der tillader dens brugere at udveksle forskellige slags data såsom billeder, lyd og videofiler over internettet.
Mange webapplikationer bruger det til at gemme vigtig information og kommunikere med hinanden. JSON behandles ofte som cachelagrede data, når de bruges til at gemme data og kan potentielt indeholde følsomme oplysninger. JSON bruges ofte i forbindelse med RESTful API'er og AJAX-applikationer til at overføre følsomme oplysninger såsom autentificeringsoplysninger, når de bruges til at sende beskeder.
Den udbredte brug af JSON i webapplikationer gør det til et mål for ondsindede aktiviteter. JSON alene er ikke en stor trussel. Det er trods alt kun et dataudvekslingsformat. De reelle sikkerhedsproblemer med JSON opstår i den måde, det bruges på. Hvis de misbruges, kan JSON-baserede applikationer blive sårbare over for angreb såsom JSON-kapring og JSON-injektion. Denne artikel vil diskutere alt om JSON-injektionsangreb, herunder hvordan man opdager og forhindrer dem.
Hvad er JSON Injection Attack, og hvordan virker det?
Injektionsangreb i webapplikationer er cyberangreb, der søger at injicere ondsindet kode i en applikation for at ændre dens normale udførelse. Injektionsangreb kan føre til tab af data, ændring af data og lammelsesangreb. Som et resultat er det opført som den største sikkerhedsrisiko for webapplikationer i OWASP Top 10 .
JSON-injektion er et typisk eksempel på et injektionsangreb, selvom det ikke er så almindeligt og farligt som den anden form for injektionsangreb, som f.eks. SQL-injektion . Semantikken af JSON-dokumenter og outputmeddelelser kan ændres væsentligt, hvis en applikation konstruerer JSON ud fra ikke-pålidelige eller uvaliderede input. En angriber kan udnytte smuthullet til at indsætte ondsindede koder, der kan ændre programmets normale udførelse. I nogle tilfælde kan JSON-injektion føre til Cross-site scripting eller Dynamisk kodeevaluering .
JSON er traditionelt blevet analyseret ved hjælp af en eval() funktion, men dette er en usikker praksis. Enhver kode, der bruger eval() til at deserialisere JSON til et JavaScript-objekt, er åben for JSON-injektionsangreb.
JSON-injektion opstår, når:
- Data fra en ikke-pålidelig kilde renses ikke af serveren og skrives direkte til en JSON-stream. Dette kaldes JSON-injektion på serversiden.
- Data fra en ikke-pålidelig kilde renses og parses ikke direkte ved hjælp af JavaScript-eval-funktionen. Dette omtales som klient-side JSON-injektion.
For at demonstrere, hvordan et JSON-injektionsangreb på serversiden fungerer, lad os overveje en webapplikation, der accepterer brugernavn og adgangskodeinput fra brugere uden rengøring. Dataene leveret af brugeren (brugernavn, adgangskode og kontotype) gemmes på serversiden som en JSON-streng. JSON-strengen er dannet ved hjælp af simpel sammenkædning som vist i koden nedenfor:
|_+_|Da applikationen ikke renser inputdataene, besluttede en ondsindet bruger at tilføje uventede data til deres brugernavn: |_+_|
Følgelig bliver den resulterende JSON-streng:
{ 'Konto':'bruger