json.stringify - usikker deserialisering

 JSON.stringify: Når det fører til usikker deserialisering

Hvorfor JSON.stringify ikke er så ufarlig som det ser ut til

Utviklere bruker JSON.stringify hver dag for å serialisere data, sende objekter over ledningen, lagre tilstand i filer eller lagre konfigurasjoner. Men det tilsynelatende harmløse kallet til JSON.stringify kan introdusere usikker deserialisering hvis dataene senere rehydreres uten validering.

Problemet er ikke JSON.stringify i seg selv, det er hvordan vi misbruker det. Når du serialiserer komplekse objekter (spesielt med prototyper eller klasseinstanser) og blindt deserialiserer dem senere ved hjelp av JSON-parsing, risikerer du å bringe skadelige nyttelaster til live i applikasjonen din.

I JavaScript er det lett å anta at det som er serialisert er trygt fordi det «bare er JSON«Men JSON er data, ikke logikk. Hvis angripere kontrollerer disse dataene, kan de utnytte tillitsgrenser i koden din. Det er her usikker deserialisering starter.

Vanlige utviklerfeil som muliggjør usikker deserialisering

Usikker deserialisering stammer vanligvis fra vaner som ser harmløse ut i kodegjennomganger. Men når JSON.stringify brukes uforsiktig, angrepsflaten utvider seg.

Usikker praksis: Serialisering av uvalidert brukerinput

⚠️Advarsel: Dette mønsteret serialiserer angriperstyrt input uten noen form for validering. Det kan føre til usikker deserialisering hvis dataene senere blir klarert.

				
					// Node.js example
const userData = req.body; // attacker-controlled
fs.writeFileSync('userdata.json', JSON.stringify(userData));

				
			

⚠️Advarsel: Deserialisering av de samme dataene uten validering kan introdusere nyttelasten i appen din på nytt.

				
					const input = JSON.parse(fs.readFileSync('userdata.json'));
doSomething(input); // Trusting it blindly

				
			

Farlig mønster: Gjenbruk av JSON på tvers av tillitsgrenser

Serialisert JSON opprettet i én tjeneste (utviklingsmiljø) blir gjenbrukt i en annen (prod) uten validering. Dette skjer ofte i interne verktøy eller mikrotjenester.

Python-eksempel på stille risiko:

⚠️Advarsel: Både serialiserings- og deserialiseringstrinnene nedenfor håndterer potensielt upålitelige data uten validering.

				
					import json
def save_user_input(data):
with open('input.json', 'w') as f:
f.write(json.dumps(data))
def process_input():
with open('input.json') as f:
data = json.loads(f.read())
execute_logic(data) # Dangerous if data structure is assumed

				
			

Begge eksemplene serialiserer og deserialiserer brukerkontrollerte data uten skjemahåndhevelse. Dette er grobunn for usikre deserialiseringsutnyttelser utløst av uforsiktig JSON. stringify-bruk.

Reelle risikoer i Pipelines: Fra kode til CI/CD Deserialiseringsflyter

Ta nå den oppførselen inn i bildet pipeline. Når JSON.stringify misbrukes i CI/CD arbeidsflyter, utsetter du byggeprosessen din for usikre deserialiseringsrisikoer. Dette skjer ofte med artefaktmetadata, testfixturer og konfigurasjonsøyeblikksbilder.

Felles CI/CD fallgruver:

  • Usikker artefaktgenerering: Byggeartefakter inkluderer serialiserte objekter som brukes på nytt på tvers av jobber uten validering.
  • Serialiserte miljøvariabler: Team lagrer miljøvariabler som serialisert JSON og bruker dem på nytt på tvers av trinn eller til og med prosjekter.
  • Injiserte testdata: Deserialiserte testdata fra ikke-klarerte commits eller grener utført uten typekontroll.

Disse mønstrene gjør det enkelt for angripere å injisere nyttelaster i pålitelige pipelines ved hjelp av manipulert JSON stringify-logikk.

⚠️Advarsel:Denne arbeidsflyten sender serialiserte data uten validering. Hvis test-runner.js ikke validerer input, risikerer den usikker deserialisering.

				
					# YAML example in GitHub Actions
steps:
- name: Load test data
run: |
echo '${{ secrets.TEST_JSON }}' > test.json
node test-runner.js test.json
				
			

If test-runner.js laster og analyserer JSON uten validering, kan det utløse en usikker deserialisering.

Sikring av JSON. Stringify med validering og sikker parsing

Løsningen er ikke å unngå JSON.stringify, men å bruke det forsiktig og bruke sikkerhetskontroller konsekvent. Håndtert riktig er det trygt, men i moderne pipelines, antagelser bryter raskt sammen.

DevSecOps-praksiser for å sikre JSON.stringify:

  • Bruk JSON-skjemaer til å validere serialiserte og deserialiserte data.
  • Håndhev streng skriving, unngå «duck typing» eller antagelser om objektformer.
  • Bruk sikre parsingsbiblioteker som støtter skjemahåndhevelse eller typebeskyttere.
  • Behandle serialiserte data som uklarerte, selv om de kom fra et klarert lager.
  • Instrument pipelines for å fange opp risikable JSON.stringify-mønstre tidlig.

Beste praksis: Dette eksemplet bruker JSON-skjemavalidering for å forhindre usikker deserialisering. Eksempel som bruker ajv i Node.js:

				
					const Ajv = require("ajv");
const ajv = new Ajv();
const schema = { type: "object", properties: { id: { type: "number" } }, required: ["id"] };
const validate = ajv.compile(schema);
const input = JSON.parse(fs.readFileSync('input.json'));
if (!validate(input)) throw new Error("Invalid input");

				
			

Sikker deserialisering betyr validering før du tillitsfull. Ikke stol på JSON. Stringify standardverdier for å holde deg trygg; definer hva safe ser ut som.

Oppdage serialiseringsrisikoer med Xygeni

Manuell revisjon fanger bare opp en viss mengde. Xygeni gir innsikt i hvordan JSON.stringify brukes på tvers av kodebasen din og pipelines.

Hva Xygeni gjør:

  • Traces JSON.stringify bruk fra kildekode til distribusjon.
  • Oppdager usikre deserialiseringsflyter, spesielt på tvers av mikrotjenester og pipeline stadier.
  • Flagger serialisering av usikre data som miljøvariabler, brukerinput eller artefakter.
  • Varsler om mønsteravvik, som viser når serialiserte data endrer form eller krysser tillitsgrenser.

Denne typen synlighet er kritisk når man håndterer usikre deserialiseringsrisikoer introdusert av JSON.stringify, spesielt i CI/CD systemer der serialiserte data beveger seg raskt og stille.

Sikring av JSON. stringify: Din Shield Mot usikker deserialisering

JSON.stringify er ikke usikkert i seg selv. Men når det brukes uten forsiktighet, blir det inngangsporten til usikker deserialisering.

Hvis du er en utvikler som jobber med JSON:

  • Revider bruken din av det på tvers av tjenester, pipelines og verktøy.
  • Behandle deserialiserte data som uklarerte.
  • Bruk skjemavalidering, håndhev typer og integrer sikkerhet i din CI/CD.

Og ikke stopp ved beste praksis, bruk Xygeni til å spore, oppdage og stoppe usikre deserialiseringsrisikoer før de går i produksjon. Serialisering er ikke nøytralt. Gjør bruk av JSON.stringify sikre.

sca-tools-programvare-verktøy for komposisjonsanalyse
Prioriter, utbedre og sikre programvarerisikoene dine
Få din gratis konto.
Ingen kredittkort kreves.

Sikre programvareutviklingen og -leveringen din

med Xygeni-produktpakken