注意啦!Chrome68以後可能你的API無法使用

aokihu發表於2018-11-15

先來了解一個新名次CROB,全稱Cross-Origin Read Blocking,是一種遏制執行惡意程式碼保護使用者資料隱私的安全策略。不同於CROS,這個策略的執行端是在瀏覽器這邊,自Chrome 68以後的版本都是預設開啟這個策略的。

那麼這個CROB會給我們的開發帶來什麼影響呢?

首先就是無論你是否已經在伺服器端配置了CROS策略,但是隻要你請求的資料是

  • html mime type
  • xml mime type(除了 image/svg+xml)
  • json mime type
  • text/plain

這四種文件型別,那麼都不能實現跨域訪問,雖然資料的確已經傳輸到了你的瀏覽器,但是你會發現你死活救贖無法讀取這些資料,沒錯,瀏覽器把這些資料在底層給你封閉鎖死了,這樣一來要實現跨域攻擊的難度就又提高了。

對於普通使用者來說提高了安全性是一件好事,但是對於開發者來說又是一道坎,但是沒辦法這道坎還是要過。

那麼什麼時候我們會遇到這道坎呢?如果你是同一個域名下的話,不會有影響,有影響的是呼叫第三方API時候才會發生,因為不是同源,而且就算對方的伺服器開啟了同源策略,在瀏覽器端依舊會受制於CROB策略,這可怎麼辦?

解決這個辦法有點小困難,因為需要在伺服器端也要做調整,如果沒有這個許可權的話就只能使用後臺代理技術來實現了。那麼來介紹下怎麼實現把。

解決方法

伺服器端

伺服器端需要對返回資料型別是text/jsonapplication/json的資料做一下更改,將MIME型別改成其他任意值都可以,比如說text/json8這樣。

然後需要將返回資料處理一下,在最前面插入非{的字元,像facebook是使用for(;;;){}這樣的形式最為前導字元,然後和要返回的JSON字串合併起來傳送給客戶端。

客戶端

客戶端只要檢查MIME型別,符合指定型別的時候就把前導字串去除,然後序列化JSON資料就可以了

相關文章