Latest web development tutorials

injeção de MySQL e SQL

Se você obter os dados inseridos pelo usuário através da web e inseri-lo em um banco de dados MySQL, então é problemas de segurança injecção possível SQL.

Esta seção irá dizer-lhe como evitar a injeção de SQL, e para filtrar caracteres de injeção SQL em um script.

A chamada injeção de SQL, é através do comando SQL no formulário Web enviar ou digite o nome de domínio ou solicitação de página string de consulta e, finalmente enganar servidor para executar comandos SQL mal-intencionados.

Nós entrada do usuário nunca mais confiança, temos de identificar os dados inseridos pelo usuário são inseguros, todos nós precisamos para o processo de filtragem de dados de entrada do usuário.

O exemplo a seguir, o nome de usuário inserido deve ser uma combinação de letras, números e sublinhados, e o comprimento do nome do usuário está entre 8-20 caracteres:

if (preg_match("/^\w{8,20}$/", $_GET['username'], $matches))
{
   $result = mysql_query("SELECT * FROM users 
                          WHERE username=$matches[0]");
}
 else 
{
   echo "username 输入异常";
}

Vamos olhar para a situação quando não há nenhum filtro SQL caracteres especiais aparecem:

// 设定$name 中插入了我们不需要的SQL语句
$name = "Qadir'; DELETE FROM users;";
mysql_query("SELECT * FROM users WHERE name='{$name}'");

Acima de declaração de injeção, não temos para filtrar o nome variável $, $ name não precisa inserir a instrução SQL irá apagar todos os dados dos usuários da tabela.

mysql_query em PHP () não é permitido para executar várias instruções SQL, mas em SQLite e PostgreSQL pode executar várias instruções SQL ao mesmo tempo, para que os utilizadores destes dados que precisamos de verificação rigorosa.

Evitar a injeção SQL, precisamos prestar atenção aos seguintes pontos:

  • 1. entrada do usuário Nunca confiança. Verificação de entrada do usuário, você pode usar expressões regulares, ou limitar o comprimento; aspas simples e duplas "-" na conversão.
  • 2. Nunca use sql conjunto dinâmico, você pode usar os parâmetros do uso direto de SQL ou procedimentos armazenados para acesso de consulta de dados.
  • 3. Nunca use administrador de conexão com o banco privilégios, use permissões individuais limitados para cada conexão do banco de dados do aplicativo.
  • 4. Não armazene informações confidenciais diretamente, criptografia ou botar para fora senhas e informações confidenciais.
  • 5. A informação excepção de aplicação deve ser administrado como alguns avisos, é melhor usar uma mensagem de erro mensagem de erro personalizada embalagem original
  • Detecção local da injecção 6.sql na plataforma geral ou suporte de software para detectar, o software comumente usado sql ferramentas de detecção de injeção jsky, internet website site de bilhões de pensamento há ferramentas de detecção de plataforma de segurança. MDCSOFT SCAN gosta. Usando MDCSOFT-IPS pode ser a injeção de defesa SQL eficaz, ataques XSS.

injeção SQL Prevent

Em linguagens de script como Perl e PHP você pode escapar os dados inseridos pelo usuário, a fim de evitar a injeção de SQL.

extensão PHP MySQL fornece a função mysql_real_escape_string () para escapar caracteres especiais de entrada.

if (get_magic_quotes_gpc()) 
{
  $name = stripslashes($name);
}
$name = mysql_real_escape_string($name);
mysql_query("SELECT * FROM users WHERE name='{$name}'");

Como injecção declaração

como a consulta, se o usuário inserir um valor de "_" e "%", em seguida, isso acontece: O usuário só estava tentando consulta "abcd_", os resultados da consulta lá "abcd _", "ABCDE", "abcdf" etc; usuário para consultar o "30%" (Nota: trinta por cento) terá problemas.

No script PHP, podemos usar addcslashes () para lidar com o caso acima, os seguintes exemplos:

$sub = addcslashes(mysql_real_escape_string("%something_"), "%_");
// $sub == \%something\_
mysql_query("SELECT * FROM messages WHERE subject LIKE '{$sub}%'");

addcslashes () função antes especificado com uma barra invertida.

sintaxe:

addcslashes(string,characters)
parâmetros descrição
corda Necessário. Para verificar a cadeia especificada.
caracteres Opcional. Prescrito pelo addcslashes () afetam personagens ou intervalos de caracteres.

Você pode ver a aplicação específica: os addcslashes PHP () função