O que está codificando os personagens do URL? Navegador ou php?
-
24-09-2019 - |
Pergunta
Imagine esta forma simples
<form action="<?php echo $_SERVER['REQUEST_URI']; ?>" method="post">
<fieldset>
<legend>Contact Me</legend>
<label for="email">Email:</label>
<input type="text" name="email" id="email" />
<button type="submit">Submit</button>
</fieldset>
</form>
Agora imagine que é acessado via form.php?hack=" onsubmit="alert('xss')
A saída quando eu vejo a fonte é
<form action="/things/?hack=%22%20onsubmit=%22alert(%27xss%27)" method="post">
O que está codificando isso - é o navegador ou PHP?
Fora da curiosidade, eu sempre eco $_SERVER['REQUEST_URI']
dentro de htmlspecialchars()
.
Solução
Isso é feito pelos navegadores, se você estiver sob alguma estrutura de PHP, alguns deles também a alteram. É semelhante ao que você faz usando PHP urlencode
função.
Outras dicas
Se você entrar form.php?hack=" onsubmit="alert('xss')
Em seu campo de endereço do seu navegador, ele o converte para form.php?hack=%22%20onsubmit=%22alert(%27xss%27)
Enquanto o "
e os personagens espaciais não são permitidos em um URI. Então eles devem ser codificados. o '
é permitido em Uris, mas também pode ser codificado.