2010-11-18 6 views
2

Je me demandais, quelle est la meilleure pratique sur l'exemple ci-dessous.Meilleure pratique pour la sortie PHP

<?php 

if(isset($_POST['query'])){ 
    $out = $_POST['query']; 
} 

?> 
<div><?php echo $out; ?></div> 
<input type="text" value="<?php echo $out; ?>" /> 

En utilisant le code ci-dessus serait-ce une menace pour le site Web. Ou aurais-je besoin de préparer la sortie avant de l'utiliser comme ci-dessus. Par préparer, je veux dire l'encoder ou échapper à des caractères spéciaux. Je suis conscient que vous avez besoin de l'échapper et de valider les entrées pour l'utilisation db, que diriez-vous de le sortir?

+0

Bonne question. ces 2 exemples sont différents. Tout en utilisant htmlspecialchars pour le second devrait être inconditionnel, mais pour le premier il ne sera utilisé que pour les entrées non fiables (parce que ce serait imprudent si vous êtes administrateur du site et que vous voulez utiliser du HTML) –

+0

OK je comprends mais tous les réponses ci-dessous dit Oui, aucun expliquer pourquoi, ou ce qui le rend si dangereux ou un exemple d'attaque? – Val

+1

juste google pour XSS –

Répondre

3

Oui, puisque vous mettez dehors en HTML utiliser encoder les caractères spéciaux de HTML de façon appropriée avec htmlspecialchars:

if (isset($_POST['query'])) { 
    $out = htmlspecialchars($_POST['query']); 
} 

En outre, $out est défini uniquement lorsqu'il existe $_POST['query']; vous devriez penser à avoir une valeur par défaut si $_POST['query'] n'existe pas. Parce que sinon, lorsque register globals sont activés (cela seul est une mauvaise idée), vous pouvez définir cette variable via la chaîne de requête d'URL avec ?out=….

1

ne savent pas sur les meilleures pratiques et qui dépendent du codeur j'aime turnary

echo (isset($_POST['query']))? htmlspecialchars($_POST['query']):""; 
Questions connexes