Os filtros PHP são usados para validar e filtrar dados de fontes não seguras, como entradas do usuário.
Filtros PHP são usados para validar e filtrar dados de fontes não seguras.
Testar, validar e filtrar entradas do usuário ou dados personalizados são partes importantes de qualquer aplicativo da web.
As extensões de filtro do PHP são projetadas para tornar a filtragem de dados mais fácil e rápida.
Quase todos os aplicativos da web dependem de entradas externas. Esses dados geralmente vêm de usuários ou de outros aplicativos (como serviços da web). Ao usar filtros, você pode garantir que seu aplicativo obtenha o tipo de entrada correto.
Você deve sempre filtrar dados externos!
A filtragem de entrada é um dos tópicos mais importantes de segurança de aplicativos.
O que são dados externos?
Insira dados do formulário
Biscoitos
Dados de serviços da Web
variáveis do servidor
Resultados da consulta ao banco de dados
Para filtrar variáveis, use uma das seguintes funções de filtro:
filter_var() - filtra uma única variável através de um filtro especificado
filter_var_array() - filtra múltiplas variáveis pelos mesmos filtros ou por filtros diferentes
filter_input - pega uma variável de entrada e a filtra
filter_input_array - pega múltiplas variáveis de entrada e as filtra através dos mesmos filtros ou de filtros diferentes
No exemplo a seguir, validamos um número inteiro usando a função filter_var():
<?php $int = 123 ; if ( ! filter_var ( $int , FILTER_VALIDATE_INT ) ) { echo ( " Não é um número inteiro válido " ) ; outro { echo ( " é um número inteiro válido " ) } ; ?>
O código acima usa o filtro "FILTER_VALIDATE_INT" para filtrar variáveis.
Se tentarmos usar uma variável não inteira (como "123abc"), a saída será: "Inteiro não é válido".
Para obter uma lista completa de funções e filtros, visite nosso Manual de referência de filtros PHP.
Existem dois tipos de filtros:
Validando filtro:
Usado para validar a entrada do usuário
Regras rígidas de formatação (como validação de URL ou e-mail)
Retorna o tipo esperado se for bem-sucedido ou FALSE se falhar
Filtro higienizador:
Usado para permitir ou proibir caracteres especificados em uma string
Sem regras de formato de dados
sempre retorna uma string
Opções e sinalizadores são usados para adicionar opções de filtragem adicionais ao filtro especificado.
Filtros diferentes têm opções e sinalizadores diferentes.
No exemplo a seguir, validamos um inteiro usando filter_var() com as opções “min_range” e “max_range”:
<?php $var = 300 ; $int_options = array ( " opções " => matriz ( " intervalo_min " => 0 , " intervalo_max " => 256 ) ) ; if ( ! filter_var ( $var , FILTER_VALIDATE_INT , $int_options ) ) { echo ( " Não é um número inteiro válido " ) ; outro { echo ( " é um número inteiro válido " ) } ; ?>
Assim como o código acima, as opções devem ser colocadas em um array relacionado chamado "opções". Se estiver usando sinalizadores, eles não precisam estar em uma matriz.
Como o número inteiro é “300”, que não está dentro do intervalo especificado, a saída do código acima será:
não é um número inteiro legal
Para obter uma lista completa de funções e filtros, visite nosso Manual de referência de filtros PHP. Você pode ver as opções e sinalizadores disponíveis para cada filtro.
Vamos tentar validar a entrada do formulário.
A primeira coisa que precisamos fazer é confirmar se os dados de entrada que procuramos existem.
Em seguida, usamos a função filter_input() para filtrar os dados de entrada.
No exemplo a seguir, a variável de entrada “email” é passada para a página PHP:
<?php if ( ! filter_has_var ( INPUT_GET , " e-mail " ) ) { echo ( " Nenhum parâmetro de e-mail " ) ; outro { se ( ! filter_input ( INPUT_GET , " email " , FILTER_VALIDATE_EMAIL ) ) { eco " E - mail inválido " } outro { eco " É um e-mail legítimo " } } ?>
O exemplo acima possui uma variável de entrada (email) passada através do método "GET":
Verifique se existe uma variável de entrada "email" do tipo "GET"
Se a variável de entrada existir, verifique se é um endereço de e-mail válido
Vamos tentar limpar a URL passada do formulário.
Primeiro, queremos confirmar se os dados de entrada que procuramos existem.
Em seguida, usamos a função filter_input() para purificar os dados de entrada.
No exemplo a seguir, a variável de entrada “url” é passada para a página PHP:
<?phpif(!filter_has_var(INPUT_GET, "url")){ echo("Sem parâmetro de url");}else{ $url = filter_input(INPUT_GET, "url", FILTER_SANITIZE_URL);>
O exemplo acima possui uma variável de entrada (url) passada através do método "GET":
Verifique se existe uma variável de entrada "url" do tipo "GET"
Se esta variável de entrada existir, limpe-a (remova caracteres ilegais) e armazene-a na variável $url
Se a variável de entrada for uma string semelhante a esta: "http://www.ruåånoøøob.com/", a variável $url higienizada ficará assim:
Os formulários geralmente consistem em vários campos de entrada. Para evitar chamadas repetidas para a função filter_var ou filter_input, podemos usar filter_var_array ou a função filter_input_array.
Neste exemplo, usamos a função filter_input_array() para filtrar três variáveis GET. As variáveis GET recebidas são um nome, uma idade e um endereço de e-mail:
<?php $filtros = matriz ( " nome " => matriz ( " filtro " => FILTER_SANITIZE_STRING ) , " idade " => matriz ( " filtro " => FILTER_VALIDATE_INT , " opções " => matriz ( " intervalo_min " => 1 , " intervalo_max " => 120 ) ) , " e-mail " => FILTER_VALIDATE_EMAIL ) ; $ resultado = filter_input_array ( INPUT_GET , $filtros ) ; ( ! $resultado [ " idade " ] ) { echo ( " A idade deve estar entre 1 e 120. <br> " ) ; elseif ( ! $resultado [ " e-mail " ] ) { echo ( " E-mail é ilegal<br> " ) } ; outro { echo ( " Entrada correta " ) } ; ?>
O exemplo acima possui três variáveis de entrada (nome, idade e email) passadas através do método "GET":
Define uma matriz contendo os nomes das variáveis de entrada e filtros para as variáveis de entrada especificadas
Chame a função filter_input_array(), os parâmetros incluem a variável de entrada GET e o array que acabou de definir
Verifique se as variáveis "idade" e "e-mail" na variável $result têm entrada ilegal. (Se houver entrada ilegal, a variável de entrada será FALSE após usar a função filter_input_array().)
O segundo argumento para a função filter_input_array() pode ser um array ou o ID de um único filtro.
Se este parâmetro for o ID de um único filtro, o filtro especificado filtrará todos os valores na matriz de entrada.
Se o parâmetro for um array, o array deverá seguir as seguintes regras:
Deve ser uma matriz associativa contendo variáveis de entrada que são as chaves da matriz (como a variável de entrada "idade")
O valor desta matriz deve ser o ID do filtro ou uma matriz especificando o filtro, sinalizadores e opções
Ao usar o filtro FILTER_CALLBACK, você pode chamar uma função personalizada e usá-la como filtro. Dessa forma, temos controle total sobre a filtragem de dados.
Você pode criar sua própria função personalizada ou usar uma função PHP existente.
Especifique a função de filtro que você pretende usar da mesma forma que a opção especificada. Em um array associativo, com o nome "opções".
No exemplo a seguir, usamos uma função personalizada para converter todos os "_" em ".":
<?php função convertSpace ( $string ) { retornar str_replace ( " _ " , " . " , $ string ) } $string = " www_codercto_com ! " ; filter_var ( $string , FILTER_CALLBACK , array ( " opções " = > " convertSpace " ) ) ;
O exemplo acima converte todos os "_" em ".":
Crie uma função que substitua "_" por "."
Chame a função filter_var() com o filtro FILTER_CALLBACK e o array que contém nossa função