2017-09-04 59 views
1

JavaScript執行是否有配置PHP /服務器(Nginx的過度PHP-FPM)的方式,以防止PHP的file_get_contents JavaScript執行?防止過度的file_get_contents

現在,如果我允許用​​戶在通過的file_get_contents顯示的文件上傳HTML文件嵌入,JS得到執行JS()調用。

我打算添加HTML過濾(即拒絕html上傳),但它會更好,如果我可以在輸出上具有第二層安全性,而不是隻在上載(如果第一層失敗考慮到這種情況)。

感謝

+0

你想,而不是發生在執行JS的什麼呢?瀏覽器只是將它視爲默認的可執行文件 - 是否要完全刪除它?或者只是將整個上傳顯示爲轉義HTML? – iainn

+0

如果你不想讓HTML都可以使用'的preg_replace(「%] +>%S」,「」,$文件)中去除所有的HTML標籤' – jcubic

+0

事實上,我所要做的是在文件類型黑名單上工作(因爲在這種情況下沒有白名單),但仍然增加額外的安全措施。我想在這種情況下最好的方法是 1)添加一些xss檢查,以儘量減少潛在的攻擊向量 2)強制內容通過類似下載 <?php header(「Content-Disposition:attachment; filename =」基名($目標)); header('Content-Transfer-Encoding:binary'); ? – Julien

回答

2

榮譽給jcubic提供的鏈接,爲什麼他的解決辦法是行不通的解釋;)

有隻有2個強大的解決方案,我知道的:

1)使用具有可證明的語法和不允許的嵌入式腳本(BBCode的非HTML標記語言)?這是合規性的still requires that you validate the submission--但比HTML更簡單。

2)應用content security policy,它不允許內嵌JavaScript - 這將是我的首選解決方案,這不僅僅是因爲您可以指定報告URL,允許您監視瀏覽器上發生的情況,而不是依靠過濾服務器。

+0

感謝symcbean。 最後,我將與 1)有一個預先xss過濾,以顯示消息給最終用戶,如果文件作爲一些腳本標記,不應該在那裏 2)使內容被迫下載 3)添加CSP爲「default-src'none';」; (3)是我失蹤了,這是完美的解決方案,因爲我有一個特定子域要下載的內容。 – Julien

-1

你可以嘗試剝離的JavaScript您呼應文件的內容之前:

echo preg_replace("%<script[^>]*>.*</script>%si", "", file_get_contents()); 

,或者你可以把這個當你上傳的文件,所以你不必這樣做每一次。

您可能還希望移除諸如具有javascript:協議的url的onclick和style之類的事件,以刪除那些使用xml解析器可能會更好的事件。

這裏是一個XSS攻擊向量的列表,你可以考慮:XSS Filter Evasion Cheat Sheet