Vídeo: AWS re:Invent 2015 | (DEV204) Building High-Performance Native Cloud Apps In C++ 2024
A primeira regra de evitar o código de injeção em programas C ++ nunca, nunca, permitem que a entrada do usuário seja processada por um intérprete de linguagem de propósito geral. Um erro comum com a injeção de SQL é que o programa aceita a entrada do usuário como se fosse sempre aceitável e inseri-lo em uma consulta SQL que ele então expulso para o mecanismo de banco de dados para processamento.
Por exemplo, um programa que solicita a entrada do usuário em uma data pode ser pirateado. A abordagem mais segura e fácil de usar seria fornecer ao usuário um gráfico de calendário a partir do qual ele poderia selecionar as datas de início e término. O programa criaria uma data com base no que o usuário clicou.
Se isso não for possível, o programa deve verificar cuidadosamente a entrada para se certificar de que a entrada estava no formato apropriado para uma data, neste caso aaaa / mm / dd < - em outras palavras, quatro dígitos seguidos por uma barra seguido de dois dígitos e uma barra e, finalmente, mais dois dígitos. Nada mais deve ser considerado entrada aceitável. Às vezes você não pode ser tão específico sobre o formato. Se você deve permitir ao usuário inserir texto flexível, pode pelo menos evitar caracteres especiais. Por exemplo, é praticamente impossível fazer injeção de código SQL sem usar uma cotação única ou dupla.
// verifique algumas string 's' para se certificar de que é straight ASCII size_type off = s. find_first_not_of ("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ01234567890_"); se (off! = string:: npos) {cerr << "errorn";}
Este código pesquisa a string
s para um personagem que não seja um dos caracteres de A a Z, a através de z, 0 a 9, ou sublinhado. Se encontrar esse tipo de personagem, o programa rejeita a entrada.