Latest web development tutorials

injeção SQLite

Se o seu site permite que os usuários de entrada e de entrada no banco de dados SQLite, desta vez você se depara com um problema de segurança é conhecida como injeção de SQL. Este capítulo irá mostrar-lhe como evitar que isso aconteça, e para assegurar que as declarações SQLite script de segurança.

Injeção geralmente ocorre quando solicitando a entrada do usuário, como o usuário precisa inserir o nome, mas o usuário inseriu uma declaração SQLite, e esta declaração será executado no banco de dados de forma inconsciente.

Nunca dados fornecidos pelo usuário confiança, processamento de dados tão somente validado, a regra é feito por correspondência de padrão. No exemplo a seguir, o nome de usuário nome de usuário é limitado a caracteres alfanuméricos ou sublinhados, o comprimento deve estar entre 8-20 caracteres - de acordo com a necessidade de modificar estas regras.

if (preg_match ( "/ ^ \ w {8,20} $ /", $ _GET [ 'username'], $ corresponde a)) {
   $ Db = new SQLiteDatabase ( 'filename');
   $ Resultado = @ $ db-> query ( "SELECT * FROM usuários ONDE username = $ matches [0]");
} Else {
   echo "username não aceito";
}

Para demonstrar este problema, considere o seguinte trecho hipótese: Para demonstrar o problema, considere o seguinte trecho:

$ Name = "Qadir '; DELETE FROM utilizadores";
@ $ Db-> query ( "SELECT * FROM usuários ONDE username = '{$ name}'");

chamada de função para recuperar o nome da coluna especificado pelo nome do usuário corresponde ao registro da tabela do usuário. Emcircunstâncias normais, $ nome contém apenas caracteres alfanuméricos e espaços, como ilia cordas.Mas aqui, a US $ nome adicionado uma nova consulta, as chamadas para o banco de dados irá causar problemas catastróficos: injetados consulta DELETE para excluir todos os registros de usuários.

Embora não é permitido para executar a interface de consulta ou banco de dados de empilhamento várias consultas em uma única chamada de função, se você tentar empilhar a consulta, em seguida, a chamada falhar, mas SQLite e PostgreSQL ainda estão empilhadas na consulta, que prevê a execução em uma string todas as consultas, que podem causar sérios problemas de segurança.

injeção SQL Prevent

Em linguagens de script como Perl e PHP, você pode habilmente lidar com tudo o caractere de escape. PHP oferece programação cadeia linguagem funçõessqlite_escape_string () para SQLite é usado para escapar de entrada de caracteres especiais.

Se (get_magic_quotes_gpc ()) 
{
  $ Name = sqlite_escape_string ($ name);
}
$ Resultado = @ $ db-> query ( "SELECT * FROM usuários ONDE username = '{$ name}'");

Embora os dados são codificados de modo que a inserção feito seguro, mas vai tornar a comparação de texto simples, na consulta, a coluna contémdados binários, COMO cláusula não está disponível.

Por favor note, addslashes () não deve ser referenciado na cadeia de consulta SQLite, ele irá levar a resultados estranhos ao recuperar dados.