2011-09-06 22 views
0

我有一個textarea輸入有一個WYSING編輯器(簡單),DB /行在UTF8_general_ci,現在我用這個在模板中設置HTML文本:strip_tags + htmlentities +在WYSING編輯器中特殊的textarea

htmlentities(utf8_decode($row['field']) 

的問題是WYSING編輯器,如果用戶把<strong> <P>或類似的,在模板上的文字顯示是標籤,而不是代碼的串碼,因爲我使用ヶ輛,但如果我不使用這個,並顯示原始文本,問題是「特殊標籤」,例如<script>, <iframe>

對此的解決方案是使用strip_tags(),只允許用於編輯器..但是一個問題仍然存在於此..如果用戶使用例如<p onclick="alert('fckoff!')">HELLO!</p>,警報顯示,因爲它允許的HTML標籤。

存在,任何方法,僅允許特定的標籤+防止瞰特殊字符(如」,」,N,或「'')+限制這種 「secutiry issures」?

坦克!

+0

您必須清理剛纔的xss漏洞,您是否使用任何PHP框架,因爲創建xss clean函數並不容易? – Usman

+0

不,它是一個手工製作的CMS,而且還沒有創建xss清理功能。任何推薦? – Zenth

回答

0

你可以做一個功能,刪除不想要的任何內容,使用正則表達式

例如刪除的onclick事件的JS,你可以這樣做:

$field = preg_replace('/onclick=\"[^"]*\"/', '', $field); 

多標籤讀取你coud:

$field = preg_replace('/(onclick|onload|onwhatever|...)=\"[^"]*\"/', '', $field); 
+0

好吧,它是一個「手動解決問題」,我現在在手工腳本中工作來清除這些錯誤。坦克。 – Zenth

0

由於您使用的是自定義的CMS /框架所以它是一個很複雜的事情,我建議你從像CodeIgniter的一個框架複製功能(S),在這裏你會發現一個好代碼(public function xss_cleanhttps://github.com/EllisLab/CodeIgniter/blob/develop/system/core/Security.php

您可以根據自己的需要對其進行修改。並通過上述鏈接的功能保持您的代碼更新,以免受到新的威脅。