Pergunta

O que são os personagens perigosos que devem ser substituídos em entrada do usuário quando a entrada dos usuários será inserido em uma consulta MySQL? Eu sei sobre aspas, aspas duplas, \ r \ n. Existem outros?
(eu não tenho a opção de usar um conector inteligente que aceita parâmetros então eu tenho que construir a consulta a mim mesmo e isso vai ser implementado em várias linguagens de programação, incluindo alguns obscuros assim soluções tais como mysql_real_escape_string em PHP não são válidos)

Foi útil?

Solução

mysql_real_escape_string () de mysql.com docs:

A string a partir é codificada para uma string SQL escapou, tendo em conta o conjunto de caracteres atual da conexão. O resultado é colocado em a e um byte nulo de terminação é anexado. Caracteres codificados são NUL (ASCII 0), “\ n”, “\ r”, “\” “"”,“"”, e Control-Z (ver Secção 8.1, ‘valores literais’). (Estritamente falando, MySQL exige apenas que barra invertida e o caracter de aspas costumava citar a string na consulta ser escapado. Esta função cita os outros personagens para torná-los mais fáceis de ler em arquivos de log.)


mysql_real_escape_string () é o conjunto de caracteres conscientes, então replicar todas as suas habilidades (especialmente contra problemas de ataque multi-byte) não é uma pequena quantidade de trabalho.

A partir http://cognifty.com/blog.entry/id= 6 / addslashes_dont_call_it_a_comeback.html :

AS = addslashes()  
MRES = mysql_real_escape_string()
ACS = addcslashes() //called with "\\\000\n\r'\"\032%_"

Feature                                         AS     MRES    ACS
escapes quote, double quote, and backslash      yes    yes     yes
escapes LIKE modifiers: underscore, percent     no     no      yes
escapes with single quotes instead of backslash no     yes*1   no
character-set aware                             no     yes*2   no
prevents multi-byte attacks                     no     yes*3   no

Outras dicas

O que idiomas você precisa para apoiar? É muito melhor usar uma linguagem de alto-sanitização do que escrever o seu próprio.

Edit: Olhando para mysql_real_escape_string em php.net:

mysql_real_escape_string() chama mysql_real_escape_string função da biblioteca do MySQL, que prepends barras invertidas para os seguintes caracteres:. \x00, \n, \r, \, ', " e \x1a

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top