Ai-je couvert toutes les bases avec la sécurité lorsque je renvoie une variable serveur à la page?

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

  •  03-07-2019
  •  | 
  •  

Question

Avec les formulaires que j'ai toujours utilisés

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

Pour que mes formulaires soient soumis à eux-mêmes.

J'utilise striptags() au cas où quelqu'un créerait un lien vers:

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

Ai-je couvert toutes les bases pour éviter les attaques XSS ou dois-je utiliser une approche plus liste blanche, disons une regex qui n'autorise que les caractères alphanumériques, la barre oblique, le point d'interrogation, le signe égal, la parenthèse, etc.?

Merci!

Était-ce utile?

La solution

Utilisez htmlspecialchars au lieu de strip_tags.

Autres conseils

Si vous souhaitez référencer le même schéma / hôte / chemin, une action simple = "? " devrait suffire. Selon 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

c'est un uri relatif valide.

Demandez à un formulaire de se soumettre en l'envoyant à cette adresse:

$_SERVER["PHP_SELF"]

Cette variable globale affichera la page actuelle. Sauf s'il existe une raison pour laquelle vous avez besoin de la chaîne de requête complète?

MODIFIER

Etant donné que, comme l'a souligné VolkerK dans les commentaires, même si PHP_SELF est vulnérable, vous pouvez écrire votre propre petite variable à partir du <=> et exploser le reste de l'URI dont vous savez qu'il ne fait pas partie de votre page. . Quelque chose comme ça:

$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;

Si vos striptags() bandes ne comportent que des balises (les caractères entre & "; < &"; et & "! > &"; y compris les crochets angulaires) , quelqu'un peut toujours injecter du javascript:

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

Améliorez la liste blanche de tous les méta-caractères possibles en HTML, Javascript et CSS (c.-à-d. les chevrons, les parenthèses, les accolades, les points-virgules, les doubles guillemets, les guillemets simples, etc.).

Si vous souhaitez qu'un formulaire se soumette à lui-même, laissez simplement l'action vide, par exemple.

<form action="" method="POST">
...
</form>
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top