Segurança com URL

<< Click to Display Table of Contents >>

Navigation:  Segurança e Otimização >

Segurança com URL

Previous pageReturn to chapter overviewNext page

echo "<p><a href='aqui.php'>Clear</a></p>";
echo "<p><a href='aqui.php?a=1&b=true'>Parametros a e b</a></p>";
 
// usando matriz para montar url
$dados = [
    "nome" => "Junior",
    "empresa" => "Market",
    "email" => "teste@com.br",
];
 
// isso aqui pega o array acima e "monta" a query string
// resulta em:  nome=Junior&empresa=Market&email=teste%40com.br
$argumentos = http_build_query($dados);
 
echo "<p><a href='aqui.php?{$argumentos}'>Argumentos do array</a></p>";
 
// usando objetos para montar a url
$obj = (object$dados;
$argumentos = http_build_query($obj);
echo "<p><a href='aqui.php?{$argumentos}'>Argumentos do objeto</a></p>";
 
// vamos criar um url perigoso (que inclui um script java)
$dados_com_script = [
    "nome" => "Junior",
    "empresa" => "Market",
    "email" => "teste@com.br",
    "script" => "<script>alerta('!')</script>",
];
$url_com_script = http_build_query($dados_com_script);
 
// aqui criamos o link para testar
echo "<p><a href='aqui.php?{$url_com_script}'>Argumentos do filtro</a></p>";
 

Segurança

 
// ao RECEBER url (GET)
 
// vamos LER o GET
// stripped = limpa coisas que podem ter script
$dados_url = filter_input_array(INPUT_GETFILTER_SANITIZE_STRIPPED);
var_dump($dados_url);
 
// tem argumentos?
if ($dados_url) {
    if (in_array(""$dados_url)) {
        // um dos argumentos está vazio?
        echo "<p style='color: red;'>falta parametros</p>";
    } elseif (empty($dados_url["email"])) {
        // email não foi passado?  
        echo "<p style='color: red;'>Falta email</p>";
    } elseif (!filter_var($dados_url["email"], FILTER_VALIDATE_EMAIL)) {
        // email foi passado mas é inválido?
        echo "<p style='color: red;'>email invalido</p>";
    } else {
        echo "<p style='color: green;'>OK!</p>";
    }
}
 

Ao montar a URL

 
// validar ANTES de criar a URL
$dados_com_script = [
    "nome" => "Junior",
    "empresa" => "Market",
    "email" => "teste@com.br",
    "script" => "<script>alerta('!')</script>",
];
 
// isso cria a url nome=Junior&empresa=Market&email=teste%40com.br
$url_com_script = http_build_query($dados_com_script);
 
// filtro por cada campo
$pre_filtro = [
    "nome" => FILTER_SANITIZE_STRING,
    "empresa" => FILTER_SANITIZE_STRING,
    "email" => FILTER_SANITIZE_EMAIL,
    "script" => FILTER_SANITIZE_STRING,
];
 
// esse aplica o filtro e já ajusta
$permitido = filter_var_array($dados_com_script$pre_filtro);
var_dump($permitido);