PHP - Auto formulaire de soumission: $_SERVER['PHP_SELF'] OU action=“”?
Je viens de réaliser que, pour d'étranges circonstances, je faisais ce que je crois être auto moyens, sans aucune référence à PHP_SELF sur le formulaire d'action de l'attribut.
Je suis perplexe, peut-on utiliser
<?php echo filter_var($_SERVER['PHP_SELF'], FILTER_SANITIZE_STRING); ?>
Ou
action=""
?
Si non, dans quelles circonstances doit-on considéré comme l'un, ou l'autre?
Merci d'avance,
MEM
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser (PHP_SELF ou une chaîne vide). mais pourquoi voudriez-vous utiliser FILTER_SANITIZE_STRING pour cela? Vous feriez mieux d'utiliser htmlentities() au lieu de filter_var dans ce cas, si votre chemin d'accès contient des caractères filtrées (par exemple
<
), la forme ne se soumettent pas.Je préfère donner une chaîne de caractères,
<base href=>
peut causer des problèmes lors de l'utilisation des valeurs vides.Exemple:
ENT_QUOTES
, au moins. Je ne vois vraiment pas le point - pourquoi ne pas simplement utiliser une chaîne vide? S'échapper de tous les apports possibles tend à ne pas être trivial, mais à l'aide d'une chaîne vide.ENT_COMPAT
qui convertit des guillemets doubles. Seulement si vous utilisez des guillemets simples pour les attributs, alors vous avez besoinENT_QUOTES
.Si je ne me trompe pas Safari a/a des problèmes avec la dernière, donc j'ai laissé tomber l'utiliser.
S'il vous plaît ne pas utilisation PHP_SELF, parce que cela peut aussi être
/index.php/"><script>alert(1)</script>/
.Il est souvent utilisé pour les Attaques XSS.
Utiliser l'index SCRIPT_NAME à la place! SCRIPT_NAME pointe toujours à la réelle fichier PHP et non pas d'entrée de l'utilisateur.
Ce qui concerne
Edit:
Deux personnes ce point, SCRIPT_NAME ne serait pas de travail lors de l'utilisation de mod_rewrite. C'est faux et je pense que ces personnes devraient lire avant de voter réponses.
Voici un scénario de test pour vous ***:
$_SERVER['REQUEST_URI']
est maintenant "/testme/", qui, j'imagine, ces gens ont attendu dans SCRIPT_NAME. Mais qui peut également pas être trouvé dans PHP_SELF./me croise les doigts
:E
$_SERVER['SCRIPT_NAME']
ne fonctionne pas avec les URL réécrite:s. Le XSS est pas un problème si la page de réception redirige après l'analyse de la demande.htmlspecialchars($var,ENT_QUOTES)
traite que, par conséquent, ou tout simplement de la liste blanche des urls & les valeurs et vérifier celles pour plus de précision, de contrôle.