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