2010-03-30 27 views
1

我有收集用戶數據的腳本,我想用HTML Purifier來檢查他們的數據是否存在惡意代碼(例如XSS和SQL注入),但是如何將它添加到我的PHP表單提交腳本中?如何集成HTML Purifier來過濾用戶提交的數據?

這裏是我的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; 
} 

} 

回答

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

你也應該考慮在DB進入前逃脫數據使用mysql_real_escape_string()

你也可以結合mysql_real_escape_string($ purifier-> purifi y($利息)),但我沒有整合以使其更具可讀性。

1

我想通過使用HTML過濾

那不是HTML淨化器是爲檢查他們像XSS和SQL注入惡意代碼的數據。

當您需要允許用戶提交包含在頁面中的實際[X] HTML時,但是您不希望它們完全訪問HTML的所有潛在危險功能。

這是而不是正確使用htmlspecialchars時,將一串文本輸出到HTML頁面時的替代。在絕大多數情況下,如果您希望使用輸入爲文本字符串而不是HTML標記,則您希望將這些<&標記轉義爲&lt;&amp;,不要將它們視爲標記並對它們進行修改以試圖使標記「清潔'。

它也沒有做任何反對SQL注入。您必須繼續使用mysqli_real_escape_string,或轉到參數化查詢。