2010-12-07 29 views
0

Je crois avoir lu tous les sujets qui me sont apparus lorsque j'écrivais le titre. En résumé, j'ai utilisé presque TOUTES les fonctions PHP pour désinfecter l'entrée de l'utilisateur, mais je n'arrive toujours pas à arrêter un simple test XSS à exécuter.Comment prévenir XSS sur mon site?

Le code que je suis en train de sécuriser est la suivante:

$keyword = $_POST['biz']; 
    $keyword = strip_tags($keyword); //this 
$keyword = addslashes(str_replace("||sp_rp_and||", "&", $keyword)); 
$keyword = addslashes(str_replace("<", "HELLO", $keyword)); //this 

$myFilter = new InputFilter(); //this 
$keyword = $myFilter->process($_POST['biz']); //this 
if($keyword=="") 
$query="select * from `business` order by business_id DESC LIMIT 0,20"; 
else 

Cependant, non des fonctions fait ce qu'il est censé faire sur le mot-clé variable de de $

Deux possibilités : * Je n'ai pas ce que je fais. * Le test XSS échoue, mais cela ne signifie pas qu'une personne peut l'utiliser pour nuire !!

Le test que j'ai utilisé est simple (dans le champ de recherche de la page): `"> alert (document.cookie); " ou via l'URL, même résultat dans les deux, une popup avec les spectacles de cookies.

Qu'est-ce que je fais de mal, été dans ce depuis quelques jours.

P.S. Même installé Mod_security2 sur le serveur et il n'a pas fait le travail (Ou je n'ai pas configuré correctement) !!

+1

Essayez de everithing de sortie qui vient de l'utilisateur 'htmlentities()' – cristian

+0

Ce serait un bon début. – RobertPitt

+0

duplication possible de [Prévention des scripts côté serveur, XSS] (http://stackoverflow.com/questions/2965430/preventing-server-side-scripting-xss) – ajreal

Répondre

2

Enveloppez tout ce qui est spécifié par l'utilisateur avec htmlspecialchars() avant de le sortir.

+0

htmlspecialchars() ne fonctionnait pas, sauf si je l'utilise au mauvais endroit ... – ma2moun

+1

@ ma2moun: Quel est le problème, exactement? Vous devez l'ajouter _only_ lors de la sortie des données. – jwueller

+0

Que voulez-vous dire lors de la sortie des données? – ma2moun

1

Il semble à moi comme vous faites tout ce travail dur traitement de la forme, puis le perdre quelques instants plus tard

que vous avez fait ici un traitement à $ _POST [ « biz »]:

$keyword = $_POST['biz']; 
    $keyword = strip_tags($keyword); //this 
$keyword = addslashes(str_replace("||sp_rp_and||", "&", $keyword)); 
$keyword = addslashes(str_replace("<", "HELLO", $keyword)); //this 

Et là, vous définissez égal à tout autre chose:

$keyword = $myFilter->process($_POST['biz']); //this

il est possible que la ligne devrait plutôt être:

$keyword = $myFilter->process($keywork);

+0

J'ai raffiné le code pour inclure une fonction à l'heure, ce qui signifie que j'ai utilisé htmlspecialchars() une fois sur $ mot-clé, pas de résultats, str_replace(), même, htmlentities(), même! \t [code] $ mot-clé = $ _POST ['biz']; \t $ keyword = mysql_real_escape_string (htmlentities ($ mot-clé)); // this \t $ keyword = htmlentities ($ mot-clé, ENT_QUOTES); // ceci [/ code] – ma2moun