2010-03-30 3 views
1

J'ai ce script qui recueille des données des utilisateurs et je veux vérifier leurs données pour le code malveillant (tels que les injections XSS et SQL) en utilisant HTML Purifier, mais comment l'ajouter à mon script de soumission de formulaire PHP?Comment intégrer HTML Purifier pour filtrer les données soumises par les utilisateurs?

Voici mon code HTML Purifier:

require_once '../../htmlpurifier/library/HTMLPurifier.auto.php'; 

$config = HTMLPurifier_Config::createDefault(); 
$config->set('Core.Encoding', 'UTF-8'); // replace with your encoding 
$config->set('HTML.Doctype', 'XHTML 1.0 Strict'); // replace with your doctype 
$purifier = new HTMLPurifier($config); 

$clean_html = $purifier->purify($dirty_html); 

Voici mon code de soumission de formulaire PHP:

if (isset($_POST['submitted'])) { // Handle the form. 

    $mysqli = mysqli_connect("localhost", "root", "", "sitename"); 
    $dbc = mysqli_query($mysqli,"SELECT users.*, profile.* 
           FROM users 
           INNER JOIN contact_info ON contact_info.user_id = users.user_id 
           WHERE users.user_id=3"); 

    $about_me = mysqli_real_escape_string($mysqli, $_POST['about_me']); 
    $interests = mysqli_real_escape_string($mysqli, $_POST['interests']); 



if (mysqli_num_rows($dbc) == 0) { 
     $mysqli = mysqli_connect("localhost", "root", "", "sitename"); 
     $dbc = mysqli_query($mysqli,"INSERT INTO profile (user_id, about_me, interests) 
            VALUES ('$user_id', '$about_me', '$interests')"); 
} 



if ($dbc == TRUE) { 
     $dbc = mysqli_query($mysqli,"UPDATE profile 
            SET about_me = '$about_me', interests = '$interests' 
            WHERE user_id = '$user_id'"); 

     echo '<p class="changes-saved">Your changes have been saved!</p>'; 
} 


if (!$dbc) { 
     // There was an error...do something about it here... 
     print mysqli_error($mysqli); 
     return; 
} 

} 

Répondre

1
if ($dbc == TRUE) { 
     //add the stuff you want to clean here. 
     $about_me = $purifier->purify($about_me); 
     $interests = $purifier->purify($interests); 

     $dbc = mysqli_query($mysqli,"UPDATE profile 
            SET about_me = '".mysql_real_escape_string ($about_me)."', interests = '".mysql_real_escape_string ($interests)."' 
            WHERE user_id = '$user_id'"); 

     echo '<p class="changes-saved">Your changes have been saved!</p>'; 
} 

Vous devriez aussi penser à échapper aux données avant d'entrer dans le DB en utilisant mysql_real_escape_string()

Vous pouvez également combiner mysql_real_escape_string ($ purifier-> purifi y ($ interest)), mais je n'ai pas consolidé pour le rendre plus lisible.

1

Je voulais vérifier leurs données pour le code malveillant comme les injections XSS et SQL en utilisant HTML Purifier

Ce n'est pas ce HTML Purifier est destiné.

HTML Purifier est pour quand vous devez permettre à l'utilisateur de soumettre le [X] HTML réel pour l'inclusion dans une page, mais vous ne voulez pas qu'ils aient un accès complet à toutes les fonctionnalités potentiellement dangereuses du HTML.

Il est pas un substitut pour une utilisation correcte de htmlspecialchars lors de la sortie d'une chaîne de texte dans une page HTML. Dans la grande majorité des cas où vous voulez utiliser l'entrée pour être des chaînes de texte et non du code HTML, vous voulez éviter les balises < et & à &lt; et &amp;, ne les traitez pas comme des balises et ne les écrasez pas pour tenter de faire ce balisage. nettoyer'.

Il ne fait rien du tout contre l'injection SQL. Vous devez continuer à utiliser mysqli_real_escape_string ou accéder aux requêtes paramétrées.