Este e os próximos capítulos mostram como usar PHP para validar os dados do formulário.
PHP validação de formulário
Pense SEGURANÇA ao processar formas de PHP!
Estas páginas mostram como processar formas de PHP com a segurança em mente. validação adequada de dados do formulário é importante para proteger a sua forma de hackers e spammers!
O formulário HTML estaremos trabalhando na nestes capítulos, contém vários campos de entrada: necessários e campos opcionais de texto, botões de rádio, e um botão de envio:
As regras de validação para o formulário acima são os seguintes:
Campo | Regras de validação |
---|---|
Nome | Requeridos. + Deve conter apenas letras e espaços em branco |
O email | Requeridos. + Deve conter um endereço de email válido (with @ and .) |
Local na rede Internet | Opcional. Se estiver presente, ele deve conter um URL válido |
Comente | Opcional. Campo de entrada multi-linha (textarea) |
Gênero | Requeridos. Deve selecionar uma |
Primeiro, vamos olhar para o código HTML simples para a forma:
Os campos de texto
Nome, e-mail e campos do site são elementos de entrada de texto, e o campo de comentário é uma textarea. O código HTML se parece com isso:
Name: <input type="text" name="name">
E-mail: <input type="text" name="email">
Website:
<input type="text" name="website">
Comment:
<textarea name="comment" rows="5" cols="40"></textarea>
Botões do rádio
Os campos de gênero são botões de rádio e o código HTML se parece com isso:
Gender:
<input type="radio" name="gender"
value="female">Female
<input type="radio" name="gender" value="male">Male
O elemento de formulário
O código HTML da forma parecida com esta:
<form method="post" action="<?php echo
htmlspecialchars($_SERVER["PHP_SELF"]);?>">
Quando o formulário é enviado, os dados do formulário é enviado com method = "post".
Qual é a $ _SERVER [ "PHP_SELF"] variável?
O $ _SERVER [ "PHP_SELF"] é uma variável super global que retorna o nome do arquivo do script atualmente em execução.
Assim, o $ _SERVER [ "PHP_SELF"] envia os dados do formulário submetidos a própria página, em vez de saltar para uma página diferente. Desta forma, o usuário receberá mensagens de erro na mesma página que o formulário.
Qual é a htmlspecialchars() função?
O htmlspecialchars() função converte caracteres especiais para entidades HTML. Isso significa que ele irá substituir caracteres HTML como <e> com & lt; e & gt ;. Isso evita que os atacantes explorem o código através da injeção de código HTML ou Javascript (Cross-site Scripting attacks) em formulários.
Nota grande em PHP Formulário de Segurança
O $ _SERVER [ "PHP_SELF"] variável pode ser usada por hackers!
Se PHP_SELF é usado em sua página, em seguida, um usuário pode inserir uma barra (/) e, em seguida, alguns Cross Site Scripting (XSS) comandos para executar.
Cross-site scripting (XSS) é um tipo de vulnerabilidade de segurança de computador normalmente encontrados em aplicações Web. XSS permite que atacantes injetem script do lado do cliente em páginas vistas por outros usuários.
Suponha que temos o seguinte formulário em uma página chamada "test_form.php" :
<form method="post" action="<?php echo $_SERVER["PHP_SELF"];?>">
Agora, se um usuário digita a URL normal na barra de endereços como "http://www.example.com/test_form.php" , o código acima será traduzido para:
<form method="post" action="test_form.php">
Por enquanto, tudo bem.
No entanto, considere que um usuário insere o seguinte URL na barra de endereços:
http://www.example.com/test_form.php/%22%3E%3Cscript%3Ealert('hacked')%3C/script%3E
Neste caso, o código acima será traduzido para:
<form method="post" action="test_form.php/"><script>alert('hacked')</script>
Este código adiciona uma tag de script e um comando de alerta. E quando a página é carregada, o código JavaScript será executado (the user will see an alert box) . Este é apenas um exemplo simples e inofensivo como a variável PHP_SELF pode ser explorada.
Esteja ciente de que qualquer código JavaScript pode ser adicionado dentro do <script> tag! Um hacker pode redirecionar o usuário para um arquivo em outro servidor, e esse arquivo pode conter código malicioso que pode alterar as variáveis globais ou enviar o formulário para outro endereço para salvar os dados do usuário, por exemplo.
Como evitar $ _SERVER [ "PHP_SELF"] Exploits?
$ _SERVER [ "PHP_SELF"] exploits podem ser evitadas usando os htmlspecialchars() função.
O código do formulário deve ficar assim:
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
O htmlspecialchars() função converte caracteres especiais para entidades HTML. Agora, se o usuário tenta explorar a variável PHP_SELF, que irá resultar na seguinte saída:
<form method="post" action="test_form.php/"><script>alert('hacked')</script>">
A exploração tentativa falhar, e nenhum dano é feito!
Validar dados de formulário Com PHP
A primeira coisa que vamos fazer é passar todas as variáveis através do PHP htmlspecialchars() função.
Quando usamos os htmlspecialchars() função; em seguida, se um usuário tentar enviar o seguinte em um campo de texto:
<Script> localização. href('http://www.hacked.com') </ script>
- isso não seria executado, porque iria ser salvos como HTML escapou código, como este:
& Lt; script de & gt; localização. href('http://www.hacked.com') & lt; / script & gt;
O código agora é seguro para ser exibido em uma página ou dentro de um e-mail.
Nós também irá fazer mais duas coisas quando o usuário envia o formulário:
- Personagens de banda desnecessários (extra space, tab, newline) a partir dos dados de entrada do usuário (with the PHP trim() função)
- Remover invertidas (\) a partir dos dados de entrada do utilizador (with the PHP stripslashes() função)
O próximo passo é criar uma função que vai fazer toda a verificação para nós (which is much more convenient than writing the same code over and over again) .
Vamos citar a função test_input() .
Agora, podemos verificar cada variável $ _POST com o test_input() função, eo script parecido com este:
Exemplo
<?php
// define variables and set to empty values
$name =
$email = $gender = $comment = $website = "";
if
($_SERVER["REQUEST_METHOD"] == "POST") {
$name =
test_input($_POST["name"]);
$email = test_input($_POST["email"]);
$website = test_input($_POST["website"]);
$comment =
test_input($_POST["comment"]);
$gender = test_input($_POST["gender"]);
}
function test_input($data) {
$data = trim($data);
$data =
stripslashes($data);
$data = htmlspecialchars($data);
return $data;
}
?>
Exemplo executar » Note-se que no início do script, vamos verificar se o formulário foi submetido usando $ _SERVER [ "REQUEST_METHOD"]. Se o REQUEST_METHOD é POST, em seguida, o formulário foi submetido - e deve ser validado. Se não tiver sido apresentada, ignorar a validação e exibir um formulário em branco.
No entanto, no exemplo acima, todos os campos de entrada são opcionais. O script funciona bem mesmo se o usuário não inserir quaisquer dados.
O próximo passo é fazer com que os campos de entrada necessários e criar mensagens de erro, se necessário.