Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Variável de usuário segura PHP


Há duas coisas muito importantes que você deve fazer para evitar sérios problemas de segurança.

  1. Você precisa escapar da entrada do usuário antes de colocá-la em sua consulta SQL. Escapar significa escapar de todos os caracteres especiais, como '; felizmente, existe uma função que já faz isso automaticamente:mysql_real_escape_string .

    Se você não escapar da entrada do usuário, coisas desagradáveis ​​podem acontecer. Imagine que sua consulta seja INSERT INTO userdata VALUES ('$user_data') . Agora imagine que o usuário escreveu '; DROP DATABASE userdata; .

    Se você não escapar, sua consulta se tornará:INSERT INTO userdata VALUES (''; DROP DATABASE userdata;') . Como você pode imaginar, isso não é bom:se você tiver várias instruções habilitadas, você pode dar adeus ao seu banco de dados. Isso é chamado de injeção de SQL ataque.

  2. Quando você está enviando sua variável para o usuário, você também precisa substituir corretamente os caracteres especiais HTML por entidades HTML. Felizmente, existe uma função para fazer isso também:htmlspecialchars() . Ele transformará os caracteres HTML especiais, como < para < .

    Este parece ser um problema que muitas vezes é subestimado, mas na realidade é muito sério. Imagine se $user_data contém <script>SomeNastyScript()</script> . Ele pode explorar vulnerabilidades existentes no navegador de seus usuários, ou pode enviar um cookie não HTTPOnly (que pode conter senhas salvas) para o invasor, ou pode enganar o usuário para escrever sua senha em um formulário gerado através da manipulação de o DOM (possível em javascript), ou muitas outras coisas ruins.

    Isso é chamado de XSS (Cross-site scripting).

Versão curta


  1. Chame mysql_real_escape_string na string antes de inseri-la em sua consulta SQL (mas não quando você echo isto).

  2. Chame htmlspecialchars na string antes de exibi-la ao usuário (mas não quando você a coloca no banco de dados).