1

ユーザーからデータを収集するこのスクリプトがあり、 HTML Purifierを使用してデータに悪意のあるコード (XSS や SQL インジェクションなど) がないかチェックしたいのですが、それを PHP フォーム送信スクリプトに追加するにはどうすればよいですか?

これが私の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);

これが私の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;
}

}
4

2 に答える 2

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>';
}

mysql_real_escape_string()を使用して DB にデータを入力する前に、データをエスケープすることも検討する必要があります。

mysql_real_escape_string($purifier->purifiy($interests)) を組み合わせることもできますが、読みやすくするために統合しませんでした。

于 2010-03-30T13:48:59.807 に答える
1

HTML Purifier を使用して、XSS や SQL インジェクションなどの悪意のあるコードについてデータをチェックしたかった

それは HTML Purifier の目的ではありません。

HTML Purifier は、ページに含めるためにユーザーが実際の [X]HTML を送信できるようにする必要があるが、HTML の潜在的に危険な機能すべてに完全にアクセスさせたくない場合に使用します。

テキストの文字列を HTML ページに出力する際の の適切な使用に代わるものではありません。htmlspecialchars入力を HTML マークアップではなくテキスト文字列にする必要があるほとんどの場合、それら<&記号を&lt;andにエスケープ&amp;し、それらをマークアップとして扱い、そのマークアップを「クリーン」にしようとしてマングルします。

また、SQL インジェクションに対しては何もしません。を引き続き使用するmysqli_real_escape_stringか、パラメーター化されたクエリに移動する必要があります。

于 2010-03-30T14:29:22.687 に答える