2013-06-26 43 views
6

我有一個企業級應用程序,登錄用戶有權使用所見即所得的編輯器發佈文章到頁面。 (你可以考慮這個應用程序作爲一個網站建設者。)如何使用Laravel允許所見即所得的編輯器和禁用XSS攻擊?

一切工作正常,但問題是;

  1. 所見即所得的編輯職位包含HTML文章,其中Laravel不喜歡也有一些本地化的字符串中的字符,所以Laravel的alpha_num檢查無法通過。 (因此,我們不使用它的驗證檢查。)

  2. 我們需要允許的字符,如<">因爲他們可能想要做的使用所見即所得的編輯器的一些基本定型,所以htmlspecialchars()是不是一種選擇,同時呼應/消毒值,因爲有害的東西,如<br>的休息。

  3. 用戶能夠發佈之類的東西,<script type="text/javascript>alert('Hello');</script></div></div></div><div style="width: 100%, height: 100% z-index: 999999">這是一個巨大的安全隱患,我知道,但我們確實不能消毒/逃避什麼。用戶仍然可以編寫<s<!---->cript>並通過支票。

因此,總之,我們不能依賴一些內置的Laravel和PHP函數。我們也不能禁用所見即所得的編輯器,因爲它經常用於口頭應用程序的大部分領域。

避免這種情況的最佳方法是什麼?

我在考慮在Laravel上的alpha_num上創建一個自定義規則,該規則將被稱爲alpha_num_localised_characters_plus_allowed_html_tags,並將該規則添加到包含所見即所得編輯器的任何輸入中。

這是一個好方法嗎?有沒有更好的選擇?你如何處理這些問題?

注意:請注意,我們已經開發了一個巨大的應用程序,我們將依靠最快和最可維護的解決方案。

+0

我想補充一點。我們目前通過任何未經Laravel驗證的輸入(例如,電子郵件| alpha |數據| custom_validations),以便通過HTMLPurifier :: purify()進行驗證。讓我知道如果有更快的方法! – Aristona

+0

我不會使用htmlpurifier「驗證」 - 而只是用它來確保輸入是「安全的」。如果該字段是必需的,那麼我只能用laravel進行驗證。 - 請參閱下面的答案以獲得更多詳細信息 –

回答

2

您可以使用類似於BBCode或Markdown的標籤系統來允許用戶執行某些操作。通過這種方式,您可以確保輸入內容會針對各種惡意腳本進行消毒,只需在顯示用戶內容時使用詞法分析器和XSS保護。

編輯:明白我的意思是,你可以使用CKEditor的爲你的所見即所得的編輯器,結合BBCode plugin

+0

好的,這感覺很棒。一位編輯發佈BBCode並同時提供所見即所得的功能?地獄是的。非常感謝。將從現在開始將它包括在我的項目中!這個解決方案就是我一直在尋找的。 – Aristona

-1

我do'nt知道如何可行的,這是你的,但一個快速簡便的解決方案是使用的HttpOnly餅乾。它可以通過注入惡意JavaScript來解決XSS攻擊,因爲這些cookie無法通過javascript訪問。您可以嘗試將敏感數據放在httpOnly Cookie中,而不是正常Cookie中的敏感數據。看到這個:http://www.codinghorror.com/blog/2008/08/protecting-your-cookies-httponly.html

+0

我不在乎cookies。無論如何,Javascript必須完全禁用。 – Aristona

1

你能運行一切通過strip_tags,只允許最小標籤可能嗎?

您可能也想看看html purifier這應該給你更多選擇,包括了CSS控制

我最常做的優點是節省了所見即所得的內容的兩個副本:

  1. 原來的未過濾的內容
  2. 已過濾的內容

這使我能夠重新處理原始內容,如果我發現vi tal已被剝離,並且在編輯時還向用戶顯示其原始html。很明顯,我在網站上顯示過濾的內容。

0

使用Laravel你可能還需要消毒的刀模板的東西。您不希望用戶輸入如下內容:{{{phpInfo()}}}。

構建一個所見即所得的編輯器需要用戶有一定程度的信任。如果您不信任用戶,那麼您的最佳選擇就是前面提到的使用自定義標籤的內容。