我有一個企業級應用程序,登錄用戶有權使用所見即所得的編輯器發佈文章到頁面。 (你可以考慮這個應用程序作爲一個網站建設者。)如何使用Laravel允許所見即所得的編輯器和禁用XSS攻擊?
一切工作正常,但問題是;
所見即所得的編輯職位包含HTML文章,其中Laravel不喜歡也有一些本地化的字符串中的字符,所以Laravel的
alpha_num
檢查無法通過。 (因此,我們不使用它的驗證檢查。)我們需要允許的字符,如
<
,"
,>
因爲他們可能想要做的使用所見即所得的編輯器的一些基本定型,所以htmlspecialchars()
是不是一種選擇,同時呼應/消毒值,因爲有害的東西,如<br>
的休息。用戶能夠發佈之類的東西,
<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
,並將該規則添加到包含所見即所得編輯器的任何輸入中。
這是一個好方法嗎?有沒有更好的選擇?你如何處理這些問題?
注意:請注意,我們已經開發了一個巨大的應用程序,我們將依靠最快和最可維護的解決方案。
我想補充一點。我們目前通過任何未經Laravel驗證的輸入(例如,電子郵件| alpha |數據| custom_validations),以便通過HTMLPurifier :: purify()進行驗證。讓我知道如果有更快的方法! – Aristona
我不會使用htmlpurifier「驗證」 - 而只是用它來確保輸入是「安全的」。如果該字段是必需的,那麼我只能用laravel進行驗證。 - 請參閱下面的答案以獲得更多詳細信息 –