Video: 10 Tips på hur du undviker en blind mördare 2024
Den första regeln att undvika kodinjektion in i C ++ -programmen är aldrig någonsin tillåta användarinmatning att behandlas av en tolkare med allmänt ändamål. Ett vanligt fel med SQL-injektion är att programmet accepterar användarinmatning som om det alltid var acceptabelt och lägger in det i en SQL-fråga som sedan skickas till databasmotorn för bearbetning.
Som ett exempel kan ett program som frågar efter användardata på ett datum hackas. Det säkraste och mest användarvänliga tillvägagångssättet är att ge användaren en kalendergrafik från vilken han kunde välja start- och slutdatum. Programmet skulle då skapa ett datum baserat på vad användaren klickade på.
Om detta inte är möjligt bör programmet noggrant kontrollera ingången för att se till att ingången var i rätt format för ett datum, i det här fallet yyyy / mm / dd < - med andra ord fyra siffror följt av ett snedstreck följt av två siffror och ett snedstreck och äntligen ytterligare två siffror. Inget annat bör anses vara acceptabel input. Ibland kan du inte vara så specifik om formatet. Om du måste tillåta användaren att skriva in flexibel text kan du åtminstone undvika specialtecken. Till exempel är det ganska mycket omöjligt att göra SQL-kodinsprutning utan att använda antingen en enkel eller dubbel citat.
// kolla några strängar för att se till att det är rakt ASCII size_type off = s. find_first_not_of ("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ01234567890_"); om {av! = sträng:: npos) {cerr << "errorn";}
Denna kod söker strängen
s för ett tecken som inte är ett av tecknen A till och med Z, a till och med z, 0 till 9, eller understrykning. Om det finns ett sådant tecken, avvisar programmet ingången.