Video: Web Programming - Computer Science for Business Leaders 2016 2024
De eerste regel om code-injecties te vermijden in C ++ -programma's is nooit ooit, toegestaan dat gebruikersinvoer kan worden verwerkt door een meertalige taalinterpreter. Een veel voorkomende fout bij SQL-injectie is dat het programma gebruikersinvoer accepteert als altijd acceptabel en invoegt in een SQL-query die vervolgens wordt verzonden naar de database-engine voor verwerking.
Als voorbeeld kan een programma dat om gebruikersinvoer vraagt op een datum, worden gehackt. De veiligste en meest gebruiksvriendelijke benadering zou zijn om de gebruiker een kalenderafbeelding te geven waaruit hij de begin- en einddatum zou kunnen kiezen. Het programma zou dan een datum creëren op basis van waar de gebruiker op geklikt heeft.
Als dit niet mogelijk is, moet het programma zorgvuldig de invoer controleren om te controleren of de invoer in het juiste formaat was voor een datum, in dit geval jjjj / mm / dd < - met andere woorden, vier cijfers gevolgd door een schuine streep gevolgd door twee cijfers en een schuine streep en ten slotte nog twee cijfers. Niets anders zou als acceptabele input moeten worden beschouwd. Soms kun je niet zo specifiek zijn over het formaat. Als u de gebruiker in staat moet stellen flexibele tekst in te voeren, kunt u op zijn minst speciale tekens vermijden. Het is bijvoorbeeld vrijwel onmogelijk om SQL-code-injectie uit te voeren zonder een enkel of dubbel aanhalingsteken te gebruiken.
// controleer wat string 's' om er zeker van te zijn dat het straight ASCII size_type off = s is. find_first_not_of ("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ01234567890_"); if (off! = string:: npos) {cerr << "errorn";}
Deze code doorzoekt de string
s naar een teken dat niet een van de tekens A tot en met Z is, a tot en met z, 0 t / m 9, of onderstrepingsteken. Als het een dergelijk teken vindt, wijst het programma de invoer af.