2010-06-20 61 views
3

限制用戶被允許進入表單域的html標籤類型的好選擇是什麼?我希望能夠做到這一點客戶端(可能使用JavaScript),服務器端在PHP中,如果用戶的瀏覽器太重,並可能在兩個組合(如果適當的話)。如何限制或限制用戶可以在網頁表單中輸入的html標籤,pref。客戶端?

實際上,我希望用戶能夠使用與Stackoverflow相同的標籤集提交數據,另外還可以使用標準的MathML標籤。表單必須接受UTF-8文本,包括亞洲的表意文字等。

在應用程序中,用戶必須能夠提交帶有基本html標籤的文本條目,並且這些條目必須能夠顯示不同的)用戶使用正確的方式呈現HTML,這對用戶來說是安全的。我打算使用htmlspecialchars()htmlspecialchars_decode()來保護我的數據庫服務器端。

非常感謝,

JDelage

PS:我搜查,但找不到這個問題...

+6

雖然這樣做的客戶端反饋是一個好主意,你*還*需要檢查它的服務器端。嘗試插入惡意腳本的用戶將能夠繞過任何客戶端檢查,而這些人員是您最想阻止在那裏獲取不需要的HTML的人。 – 2010-06-20 13:59:19

+0

Duh ...當然,你是對的。感謝那! – JDelage 2010-06-20 14:04:59

回答

3

如果你正在尋找過濾輸入agains XSS攻擊等,可以考慮使用現有的庫如HTML Purifier。我還沒有使用它自己,但它承諾了很多,並在高度重視。

HTML淨化器是一個符合標準的 PHP過濾器庫,編寫在 PHP中。它還將確保您的文檔符合標準 ,只有通過W3C的全面知識才能實現這些內容.HTML Purifier不僅可以刪除所有惡意的 代碼(更好的稱爲XSS),而且還可以確保您的文檔符合標準,只能通過 獲得全面的知識。規格。

+0

感謝您的輸入。這看起來有點複雜。我從來沒有在圖書館工作過...... – JDelage 2010-06-20 14:04:04

+1

@JDelage是的,它需要一些時間才能進入,但我敢肯定它比開始清除所有潛在的危險要容易得多,容易得多。 – 2010-06-20 14:06:18

+0

夠公平的。另一個問題是向用戶解釋他們可以做什麼和不可以做什麼。我不想簡單地說「你的代碼不被允許」。 – JDelage 2010-06-20 14:13:10

0

你可以做這樣的事情,如果你熟悉正則表達式:

<?php 

function parse($string) 
{ 
//To stop unwanted HTML tags being used 
$string = str_replace("<","&lt;",$string); //Replace all < with the HTML equiv 
$string = str_replace(">","&gt;",$string); //Replace all > with the HTML equiv 

$find = array(
"%\*\*\*(.+?)\*\*\*%s", //Search for ***any string here*** 
"%`(.+?)`%s",   //Search for `any string here` 
); 

$replace = array(
"<b>\\1</b>",           //Replace with <b>any string here</b> 
"<span style=\"background-color: #DDDDDD\">\\1</span>" //Replace with <span style="background-color: #DDDDDD">any string here</span> 
); 

$string = preg_replace($find,$replace,$string); //Do the find and replace 
return $string; //Return the output 
} 

echo parse("***Hello*** `There` <b>Friend</b>"); 
?> 

輸出:

你好There < B>朋友</B>

+0

改爲使用真正的降價解析器;) – ThiefMaster 2011-03-02 13:54:50

0

我認爲使用方法很簡單,只需指定您允許的標籤即可。

0

我有類似的問題一段時間了。有一些$%^ & *)誰喜歡張貼一些評論,如<script>alert('Hello');</script>或類似的東西。我累了,做了一個小功能,它幫助我,允許,只有<br><br />標籤正常查看消息。 我只用PHP做過,但我認爲它可以幫助你。

function eliminateTags($msg) { 
    $setBrakes = nl2br($msg); 
    $decodeHTML = htmlspecialchars_decode($setBrakes); 

    # Check PHP version 
    if(version_compare(PHP_VERSION, '5.2') == 1) { 
     $withoutTags = strip_tags($decodeHTML, "<br />"); 
    } else { 
     $withoutTags = strip_tags($decodeHTML, "<br>"); 
    } 
    return $withoutTags; 
}