2010-04-30 16 views
4

Quels sont les bons désinfectants html PHP (entrée)?Désinfectant d'entrée PHP?

De préférence, si quelque chose est intégré - j'aimerais que nous le fassions.

MISE À JOUR:

par la demande, via les commentaires, l'entrée doit pas autoriser le HTML (et évidemment éviter XSS & injection SQL, etc.).

+0

Je pense que cette question a besoin de plus d'informations; Parlez-vous de permettre à l'utilisateur de saisir du code HTML directement et de le désinfecter pour supprimer des balises comme '

0

J'ai toujours utilisé les addslashes() de PHP et stripslashes fonctions(), mais je viens de voir aussi la fonction intégrée filter_var() (link). On dirait qu'il y en a pas mal quelques built-in filters.

+0

dans quel but as-tu utilisé les fonctions addslashes() et stripslashes() de PHP? –

0

Si vous souhaitez exécuter une requête qui utilise disons $_GET['user'] une bonne solution serait de faire quelque chose comme ceci en utilisant mysql_real_escape_string():

<?php 

    $user = mysql_real_escape_string($_GET['user']); 
    $SQL = "SELECT * FROM users WHERE username = '$name'"; 

    //run $SQL now 
    ... 
?> 

Si vous souhaitez enregistrer un texte dans une base de données, puis l'imprimer sur une page Web, pensez à utiliser htmlentities

[Modifier] Ou comme awshepard dit, vous pouvez utiliser addslashes() et stripslashes() fonctions [/ Modifier]

Voici un petit exemple de sanitization quand il s'agit pour prévenir les attaques XSS:

<?php 
    $str = "A 'quote' is <b>bold</b>"; 

    //Outputs: A 'quote' is <b>bold</b> 
    echo $str; 

    // Outputs: A 'quote' is &lt;b&gt;bold&lt;/b&gt; 
    echo htmlentities($str); 

    // Outputs: A &#039;quote&#039; is &lt;b&gt;bold&lt;/b&gt; 
    echo htmlentities($str, ENT_QUOTES); 
?> 
+0

Votre exemple MySQL ne vous ouvrirait pas à SQL Injection (votre exemple devrait utiliser Prepared Statements) – TeddyN

+0

Je n'utilise pas Prepared Statements.J'utilise mysql_real_escape_string(), comme dans l'exemple, beaucoup dans mon code PHP et jusqu'à présent je ne pouvais pas trouver un moyen d'exploiter le code que j'ai écrit. vecteur d'attaque qui peut contourner mysql_real_escape_string(), donc si vous avez un exemple s'il vous plaît faites le moi savoir.Je veux toujours apprendre quelque chose de nouveau –

+0

@Dr Optix, StackOverflow confirme que mysql_real_escape_string() n'empêche pas toujours l'injection SQL -> http: //stackoverflow.com/questions/1220182/does-mysql-real-escape-string-fully-protect-against-sql-injection – TeddyN

0

utilisation

$input_var=sanitize_input($_POST); 

et fonctions ci-dessous, presque désinfecte everthing u besoin

function sanitize($var, $santype = 1){ 
    if ($santype == 1) {return strip_tags($var);} 
    if ($santype == 2) {return htmlentities(strip_tags($var),ENT_QUOTES,'UTF-8');} 
    if ($santype == 3) 
    { 
     if (!get_magic_quotes_gpc()) { 
     return addslashes(htmlentities(strip_tags($var),ENT_QUOTES,'UTF-8')); 
     } 
     else { 
     return htmlentities(strip_tags($var),ENT_QUOTES,'UTF-8'); 
     } 
    } 
    } 

function sanitize_input($input,$escape_mysql=false,$sanitize_html=true, 
      $sanitize_special_chars=true,$allowable_tags='<br><b><strong><p>') 
    { 
     unset($input['submit']); //we use 'submit' variable for all of our form 

     $input_array = $input; 

     //array is not referenced when passed into foreach 
     //this is why we create another exact array 
     foreach ($input as $key=>$value) 
     { 
     if(!empty($value)) 
     { 
     $input_array[$key]=strtolower($input_array[$key]); 
     //stripslashes added by magic quotes 
     if(get_magic_quotes_gpc()){$input_array[$key]=sanitize($input_array[$key]);} 

     if($sanitize_html){$input_array[$key] = strip_tags($input_array[$key],$allowable_tags);} 

     if($sanitize_special_chars){$input_array[$key] = htmlspecialchars($input_array[$key]);}  

     if($escape_mysql){$input_array[$key] = mysql_real_escape_string($input_array[$key]);} 
     } 
     } 

     return $input_array; 

    } 

Rappelez-vous: il ne nettoiera pas le tableau multidimensionnel, vous devez le modifier récursivement.