Como evitar a injeção de código em C ++

A primeira regra de evitar código de injetar em programas em C ++ nunca é, sempre, permitir a entrada do usuário para ser processado por um intérprete de linguagem de propósito geral. Um erro comum com injeção SQL é que o programa aceita entrada do usuário como se fosse sempre aceitável e insere-lo em uma consulta SQL que ele então envia fora para o motor de banco de dados para processamento.

Como exemplo, um programa a pedir a entrada do usuário em uma data poderia ser cortado. A abordagem mais segura e mais user-friendly seria fornecer ao utilizador um gráfico do calendário a partir do qual ele poderia selecionar as datas de início e término. O programa, então, criar uma data com base no que o usuário clicou.

Se isso não for possível, então o programa deve verificar cuidadosamente a entrada para certificar-se de que a entrada foi no formato adequado para uma data, no presente caso aaaa / mm / dd - em outras palavras, quatro dígitos seguido por uma barra seguida de dois dígitos e uma barra e, finalmente, mais dois dígitos. Nada mais deve ser considerado de entrada aceitável.

Às vezes você pode # 8242-t ser que específica sobre o formato. Se você deve permitir que o usuário digitar um texto flexível, então você pode pelo menos evitar caracteres especiais. Por exemplo, # 8242-s praticamente impossível fazer a injeção de código SQL sem usar um aspas simples ou duplas.

Você pode # 8242-t tags insert HTML sem usando um menor que (lt;) e maior que (>) sinal. Ou você pode apenas tomar a abordagem que qualquer coisa diferente de texto ASCII não será tolerado:

// Verifica alguma cadeia # 8242-s # 8242- para se certificar de que # 8242-s ASCIIsize_type em linha reta fora = s.find_first_not_of ( "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ01234567890 _") - if (! Off = string :: npos) {cerr lt; lt; "Erro n" -}

Este código procura a string s para um personagem que # 8242-S não é um dos personagens de A a Z, A a Z, 0 a 9, ou sublinhado. Se ele encontrar um personagem, então o programa rejeita a entrada.

Se você permitir que apenas os caracteres latinos mostrado aqui, a sua aplicação não será utilizável em muitos mercados estrangeiros, como aqueles que don # 8242-t usam conjuntos de caracteres Inglês (tais como árabe, chinês, hebraico ou russo, para citar apenas alguns ). Você pode ter que tomar o caminho inverso e basta olhar para os personagens maus.

menu