2011-06-01 44 views
2

我將html存儲在數據庫中,並且需要將其輸出到頁面。在轉義爲XSS後未翻轉某些HTML標記

  • 如果我不逃(),然後我得到大膽格式我想,但我跑得從轉義的HTML源代碼得到一個XSS的風險。
  • 如果我轉義()它,那麼它顯示原始html代碼<b>bold text</b>而不是加粗文本

我怎樣才能逃脫一切,除了一些標籤?我正在考慮應用escape(),然後搜索<b></b>並使其無法正常使用。這會起作用嗎?你看到的任何安全問題?我也不確定我將如何搜索<b></b>標籤。正則表達式可能或什麼?

P.S. escape()我的意思是Zend中的一個函數。我相信這相當於htmlspecialchars()

回答

1

轉義是要走的路。如果你只有白名單一對標籤將被轉換回html轉義,那麼你將不會遇到XSS漏洞。

解決方法標記沒有提供任何優勢,因爲許多失敗的BBcode解析器都證明了這一點。

(而不是來回轉換的可能不過是明智的利用HTMLPurifier代替。)

1

如果數據庫中的HTML標記來自您不信任的用戶,您應該允許他們訪問markdown或類似的「安全」編輯環境,以便他們可以準備他們想要的標記並且不允許注入HTML 。

嘗試執行選擇性過濾經常是錯誤的,並且錯過攻擊者可以注入惡意代碼的方式。所以不要讓他們寫原始的HTML。

1

htmlspecialchars_decode()htmlspecialchars()相反。有可能會忽略它,但沒有限制標籤的參數。

如果html是由用戶寫它是壞主意:)

+0

這就是爲什麼我想不使用的'用htmlspecialchars完全相反()'和使用一個自定義函數,它只會隱藏我想要的標記。 – sameold 2011-06-01 00:27:12

1

嘗試使用strip_tags在第二個參數是$ allowable_tags

1

使用Zend_Filter_StripTags類作爲參數的構造函數中使用用下面的鍵的數組:被允許

  1. 'allowTags'=>標籤
  2. 「allowAttribs」 =>屬性被允許

這第二部分可剪裁所有不需要的attribs喜歡的「onClick」等等,其可以像<script>代碼爲危險的,但你可以離開「src」中的<img>或「HREF」爲<a>