Как интегрировать HTML-очиститель для фильтрации пользовательских данных? - PullRequest
1 голос
/ 30 марта 2010

У меня есть этот сценарий, который собирает данные от пользователей, и я хочу проверить их данные на наличие вредоносного кода (такого как инъекции XSS и SQL) с помощью HTML Purifier , но как мне добавить его в мой PHP скрипт отправки формы?

Вот мой код очистителя HTML:

 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);

Вот мой код отправки формы 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;
}

}

Ответы [ 2 ]

1 голос
/ 30 марта 2010

Я хотел проверить их данные на наличие вредоносного кода, такого как инъекции XSS и SQL, с помощью HTML Purifier

Это не то, для чего предназначен HTML Purifier.

HTML Purifier предназначен для случаев, когда вам нужно разрешить пользователю отправлять фактический [X] HTML для включения в страницу, но вы не хотите, чтобы он имел полный доступ ко всем потенциально опасным функциям HTML.

Это , а не заменитель правильного использования htmlspecialchars при выводе строки текста на страницу HTML. В подавляющем большинстве случаев, когда вы хотите, чтобы ввод был текстовой строкой, а не разметкой HTML, вы должны экранировать эти знаки < и & до &lt; и &amp;, а не рассматривать их как разметку и искажать их. в попытке сделать эту разметку «чистой».

Он также ничего не делает против внедрения SQL. Вы должны продолжать использовать mysqli_real_escape_string или переходить к параметризованным запросам.

1 голос
/ 30 марта 2010
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>';
}

Вам также следует подумать об экранировании данных, прежде чем вводить их в БД, используя mysql_real_escape_string ()

Вы также можете объединить mysql_real_escape_string ($ очиститель-> очистить ($ интересов)), но я не консолидировал, чтобы сделать его более читабельным.

...