2017-06-20 54 views
0

我想對這些報頭在我的應用程序的清晰度:設置X-Content-Type的選項響應頭損壞了PNG文件

response.setHeader("Content-Security-Policy", "frame-ancestors 'self'");  
response.setHeader("X-Content-Type-Options", "nosniff"); 
response.setHeader("X-XSS-Protection", "1; mode=block"); 
response.setHeader("Strict-Transport-Security", "max-age=7776000; cludeSubdomains"); 
String contextPath = ((HttpServletRequest) request).getContextPath(); 
response.setHeader("SET-COOKIE", "JSESSIONID=" + 
    ((HttpServletRequest)request).getSession().getId() + 
    ";Path="+contextPath+";Secure;HttpOnly"); 
response.setHeader("Cache-control", "no-cache, no-store,max-age=0, must-revalidate"); 
response.setHeader("Pragma", "no-cache"); 
response.setHeader("X-Frame-Options", "SAMEORIGIN"); 

截至目前,我知道:

  1. 內容安全策略是附加的安全層,有助於 檢測和減輕某些類型的攻擊,包括跨站點 腳本(XSS)和數據注入攻擊。
  2. X-的Content-Type-選項響應HTTP標頭是由服務器使用以指示標記,在內容類型報頭通告的MIME types不應改變和被遵循。
  3. X-XSS-protection是XSS過濾器。
  4. 嚴格,交通運輸,安全性是由Web應用程序通過使用一種特殊的響應頭的指定一個選擇的增強安全性。一旦支持的瀏覽器收到這個頭文件,瀏覽器將阻止任何通信通過HTTP發送到指定的域,而是通過HTTPS發送所有通信。
  5. 緩存控制通用頭字段用於指定在兩個,請求和響應的緩存機制的指令。
  6. Pragma旨在防止客戶端緩存響應。然而,有高速緩存控制和附註頭響應標頭之間的差,因爲它們都沒有除了附註同樣的工作是HTTP/1.0實施和緩存控制是HTTP/1.1實施相同的概念的..
  7. X框-選項用於指示是否允許瀏覽器呈現frameiframeobject中的頁面。

現在我在CrossSiteScriptingFilter中有這個代碼,它映射在web.xml中,它進行XSS過濾。但因此它會更改.png文件編碼並刪除?字符,這些字符會破壞PNG文件編碼並因此給出錯誤的PNG數據。

請檢查截圖,它沒有?個字符,並被空字符串替換,因此它不允許.png文件進行呈現。 enter image description here

我分析了代碼,發現刪除響應頭X-Content-Type-Options正在做這件工作(.png文件渲染正常)。

我仍不確定爲什麼會出現此問題,並且爲什麼X-Content-Type-Options正在將?字符替換爲""字符串,該字符串正在產生問題。有人可以解釋。

感謝提前:)

回答

1

像你很接近你的答案聽起來對我說:特殊字符的XSS過濾一個壞主意的二進制文件可以有效使用的字符,這將是不合時宜(x)html,js或類似的解釋文件。

通常情況下,Web應用程序拆分這些資源變成自己的目錄,將有應用到它的內容,比方說,沒有運行在其上的XSS過濾器保護不同的進程。在配置過濾器時,應排除已知只包含二進制數據的路徑,例如上述資源目錄。

看起來有可能是頭部導致/禁止過濾器猜測MIME類型,將您的二進制文件誤解爲html或類似文件(可能基於PNG頭文本)或者只是回退過濾器默認情況下,然後消毒。這可能是因爲你的MIME類型頭文件是錯誤的,嗅探器正在修復它(因此告訴它不要這樣做,防止它恢復)。

+0

+1回答,web.xml中是否有任何選項排除XSS腳本的已知路徑。現在我有一個修復程序,在繼續處理響應頭之前,我正在檢查過濾器中的路徑。如果還有其他解決辦法,我可以想到,除此之外,我很樂意知道這一點。 – ashishraaj

+0

我不確定有沒有變得複雜。這個問題似乎相關,他們得出了類似的結論:https://stackoverflow.com/questions/8658949/in-a-web-xml-url-pattern-matcher-is-there-a-way-to-exclude-但接受的答案只能用於代碼。 – Danikov