Video: Slik unngår du å bli krenket 2025
Den første regelen om å unngå kodeinjeksjon inn i C ++-programmer er aldri noensinne tillat brukerinngang å bli behandlet av en tolkespråker med allment bruk. En vanlig feil med SQL-injeksjon er at programmet aksepterer brukerinngang som om den alltid var akseptabel og legger den inn i en SQL-spørring som den deretter sender ut til databasemotoren for behandling.
Som et eksempel kan et program som ber om brukerinngang på en dato bli hacket. Den sikreste og mest brukervennlige tilnærmingen ville være å gi brukeren en kalenderenivå som han kunne velge start- og sluttdato for. Programmet vil da opprette en dato basert på hva brukeren klikket på.
Hvis dette ikke er mulig, bør programmet nøye sjekke inngangen for å kontrollere at inngangen var i riktig format for en dato, i dette tilfellet åååå / mm / dd < - med andre ord fire siffer etterfulgt av et skråstrek etterfulgt av to siffer og et skråstrek og til slutt to andre sifre. Ingenting annet bør betraktes som akseptabel innsats. Noen ganger kan du ikke være så spesifikk om formatet. Hvis du må la brukeren legge inn fleksibel tekst, kan du i det minste unngå spesialtegn. For eksempel er det ganske mye umulig å gjøre SQL-kodeinjeksjon uten å bruke enten et enkelt eller dobbelt tilbud.
// sjekk litt streng 'for å sikre at det er rett ASCII size_type off = s. find_first_not_of ("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ01234567890_"); hvis (av! = streng:: npos) {cerr << "errorn";}
Denne koden søker i strengen
s for et tegn som ikke er et av tegnene A til og med Z, a til og med z, 0 til 9 eller understreke. Hvis den finner et slikt tegn, avslår programmet inngangen.
