Como impedir a injeção de SQL no PHP
- 1966
- 506
- Loren Botsford
Este tutorial ajudará você a impedir o SQL injete no PHP. Neste tutorial primeiro, verifique um exemplo básico de processo de injeção de SQL. Como os usuários podem roubar dados do seu site usando a injeção SQL? Este tutorial também inclui métodos para impedir a injeção de SQL usando drivers PHP-MYSQLI e PHP-PDO.
Exemplo simples de injeção SQL
Por exemplo, um site para um banco para o banco. Você forneceu uma interface da web aos clientes bancários para visualizar o número e o saldo de sua conta. O site do seu banco usa URL como http: // Exemplo.com/get_account_details.php?conta_id = 102 Para buscar detalhes do banco de dados.
Por exemplo get_account_details.php tenha código algo como abaixo.
$ accountId = $ _Get ['Account_id']; $ query = "selecione AccountNumber, saldo de contas onde conta = $ conta";12 | $ accountId = $ _Get ['Account_id']; $ query = "Selecione AccountNumber, saldo das contas onde conta = $ accountId"; |
Os clientes AccountId são passados pela String de consulta como conta_id. Como o URL acima, se o ID da conta de um usuário 102 e ele passou na sequência de consultas. O script PHP criará uma consulta como abaixo.
$ query = "selecione AccountNumber, saldo de contas onde conta = 102";1 | $ query = "selecione AccountNumber, saldo de contas onde conta = 102"; |
Os detalhes do Number e do saldo da conta são buscados para o AccountId 102 e fornecidos aos clientes como exibição na captura de tela acima.
Vamos assumir outro cenário - um cliente mais inteligente passou por conta_id como 0 ou 1 = 1
na string de consulta. O que vai acontecer agora? O script PHP criará uma consulta como abaixo e executado no banco de dados.
1 | $ query = "selecione AccountNumber, saldo de contas onde conta = 0 ou 1 = 1"; |
Veja a consulta criada pelo script e o resultado retornado pelo banco de dados. Você pode ver que esta consulta retornou o número de contas e o saldo disponível.
Isso é chamado de injeção de SQL. Este é o cenário simples, pode haver vários métodos para fazer injeções de SQL. Abaixo o tutorial ajudará você a prevenir a injeção de SQL usando o driver php mysqli e o driver pdo php.
#1. Usando o driver php-mysqli
Você pode usar declarações preparadas para driver php-mysqli para evitar esse tipo de injeção de SQL. Use o código PHP abaixo que impedirá a injeção de SQL.
$ accountId = $ _Get ['Account_id']; if ($ stmt = $ mysqli-> preparar ('selecione AccountNumber, saldo de contas em que conta AccountId = ?')) $ stmt-> bind_param ("s", $ accountId); $ stmt-> Execute (); $ resultado = $ stmt-> get_result (); while ($ row = $ result-> fetch_assoc ()) // faça algo aqui $ stmt-> close ();12345678910111213141516 | $ accountId = $ _Get ['Account_id']; if ($ stmt = $ mysqli-> preparar ('selecione AccountNumber, saldo de contas em que conta AccountId = ?')) $ stmt-> bind_param ("s", $ accountId); $ stmt-> Execute (); $ resultado = $ stmt-> get_result (); while ($ row = $ result-> fetch_assoc ()) // faça algo aqui $ stmt-> close (); |
#2. Usando o driver php-pdo
Você pode usar o driver PHP-PDO preparar declarações para evitar esse tipo de injeção de SQL. Use o código PHP abaixo que resolverá as injeções SQL.
$ accountId = $ _Get ['Account_id']; if ($ stmt = $ pDO-> preparar ('selecione a conta, saldo de contas em que accountId =: accountId')) $ stmt-> execute (array ('nome' => $ name)); foreach ($ stmt como $ row) // faça algo aqui $ stmt-> close ();123456789101112 | $ accountId = $ _Get ['Account_id']; if ($ stmt = $ pDO-> preparar ('selecione a conta, saldo de contas em que accountId =: accountId')) $ stmt-> execute (array ('nome' => $ name)); foreach ($ stmt como $ row) // faça algo aqui $ stmt-> close (); |
- « Como instalar o servidor de correio postal no Ubuntu 16.04 e 14.04
- Como instalar o Visual Studio Code Editor em Sel & OpenSuse »