前端跨域問(wèn)題的解決方案

同源策略

什么是同源嗜憔,兩個(gè)頁(yè)面擁有相同的協(xié)議杜跷、端口涣旨、域名(指向同一個(gè)ip的不同域名不算同源) 就是同源歪架,瀏覽器規(guī)定,不同源的Cookie SeesionStorage LocalStorage IndexDB無(wú)法相互讀取霹陡,無(wú)法獲得不同源的domjs對(duì)象和蚪,無(wú)法發(fā)送ajax請(qǐng)求。
同源策略是瀏覽器最核心也最基本的安全功能烹棉。
如果沒(méi)有同源策略攒霹,可能會(huì)出現(xiàn)CSRF攻擊和XSS攻擊。
所以同源策略是通過(guò)限制前端的行為浆洗,防止針對(duì)服務(wù)器的攻擊催束。

CSRF攻擊

Cross-Site Request Forgery,這是一種利用帶有用戶登陸狀態(tài)的cookie進(jìn)行安全操作的攻擊方式伏社。

攻擊步驟
  1. 用戶登陸網(wǎng)站A(被攻擊對(duì)象)
  2. 用戶在A未關(guān)閉的情況下打開(kāi)B(攻擊者)
  3. B發(fā)起對(duì)網(wǎng)站A服務(wù)端的請(qǐng)求抠刺,攜帶合法的cookie。
如何防范

XSS攻擊

又叫CSS(Cross Site Script)攻擊摘昌,是指攻擊者在被攻擊的Web頁(yè)面里插入惡意的Javascript代碼速妖,當(dāng)其他用戶瀏覽該網(wǎng)頁(yè)時(shí),嵌入在Web里面的惡意代碼執(zhí)行聪黎。屬于被動(dòng)式的攻擊罕容。

如何防范
  1. 過(guò)濾輸入:對(duì)用戶提交的內(nèi)容進(jìn)行可靠的輸入驗(yàn)證
  2. 轉(zhuǎn)義輸出:不解釋惡意標(biāo)簽

如何解決跨域問(wèn)題

日常工作中總會(huì)存在需要跨源訪問(wèn)資源的時(shí)候,比如node所在的server與更后臺(tái)的server之間的通信。那么我們?nèi)绻鉀Q呢杀赢?

CORS

CORS(Cross-Origin Resources Sharing)是W3C標(biāo)準(zhǔn)烘跺,也就是官方站出來(lái)解決跨域問(wèn)題了, 它需要客戶端和服務(wù)器同時(shí)支持。

簡(jiǎn)單請(qǐng)求

什么是簡(jiǎn)單請(qǐng)求脂崔,即HEAD GET POST滤淳,并且Header只能

  • Accept
  • Accept-Language
  • Content-Language
  • Last-Event-ID
  • Content-Type:application/x-www-form-urlencoded、 multipart/form-data砌左、text/plain
請(qǐng)求步驟
  1. 客戶端發(fā)起簡(jiǎn)單請(qǐng)求脖咐,header攜帶Origin,表示協(xié)議+域名+端口
  2. 瀏覽器根據(jù)服務(wù)端的設(shè)置汇歹,判斷是否在允許源屁擅,若允許,則Reponse Header加上
    • Access-Control-Allow-Origin:表示服務(wù)端允許的請(qǐng)求源产弹,*標(biāo)識(shí)任何外域派歌,多個(gè)源 , 分隔可選字段
    • Access-Control-Allow-Credentials(optional)false 表示是否允許發(fā)送Cookie,設(shè)置為true
      同時(shí)痰哨,ajax請(qǐng)求設(shè)置withCredentials = true(或者fetch請(qǐng)求credentials值為include) 且Access-Control-Allow-Origin不為*,瀏覽器的cookie就能發(fā)送到服務(wù)端.
非簡(jiǎn)單請(qǐng)求

簡(jiǎn)單請(qǐng)求之外的其余請(qǐng)求胶果,就是非簡(jiǎn)單請(qǐng)求。瀏覽器發(fā)出CORS非簡(jiǎn)單請(qǐng)求斤斧,會(huì)在正式通信之前早抠,增加了一次OPTIONS查詢請(qǐng)求,稱(chēng)為"預(yù)檢"請(qǐng)求(preflight)撬讽,用于確認(rèn)服務(wù)器是否允許跨域蕊连。瀏覽器先詢問(wèn)服務(wù)器,當(dāng)前網(wǎng)頁(yè)所在的域名是否在服務(wù)器的許可名單之中游昼,以及可以使用哪些HTTP動(dòng)詞和頭信息字段甘苍,只有得到肯定的答復(fù),瀏覽器才會(huì)發(fā)出正式的XMLHttpRequest請(qǐng)求酱床。

服務(wù)端如何支持CORS
  1. Access-Control-Allow-Origin(必填):*或者具體的站點(diǎn)
  2. Access-Control-Allow-Methods(必填):*或者允許的跨域請(qǐng)求方法
  3. Access-Control-Expose-Headers(可選):僅在預(yù)檢請(qǐng)求的響應(yīng)頭中有效羊赵,表示服務(wù)器允許攜帶的請(qǐng)求頭。當(dāng)CORS請(qǐng)求時(shí)扇谣,XMLHttpRequest對(duì)象的getResponseHeader()方法只能拿到6個(gè)基本字段:Cache-Control昧捷、Content-Language、Content-Type罐寨、Expires靡挥、Last-Modified、Pragma鸯绿。如果想拿到其他字段跋破,就必須在Access-Control-Expose-Headers里面指定簸淀。
  4. Access-Control-Allow-Credentials(可選):是否允許發(fā)送cookie,默認(rèn)不發(fā)送毒返。
  5. Access-Control-Max-Age(可選):本次預(yù)檢請(qǐng)求的有效期

JSONP

其實(shí)現(xiàn)在已經(jīng)2023年了租幕,我不知道解釋JSONP的意義何在,但架不住面試的時(shí)候可能會(huì)問(wèn)拧簸,這里就淺聊一下劲绪。
JSONP可以work主要是因?yàn)闉g覽器認(rèn)為它用自己的script標(biāo)簽加載的跨源script為同源,對(duì)于同源策略有一個(gè)很關(guān)鍵的點(diǎn)盆赤,同源策略并非應(yīng)用于跨源窗口中的所有對(duì)象的所有屬性贾富,只應(yīng)用于大多數(shù)屬性,尤其是Document對(duì)象幾乎所有屬性牺六。
JSONP的原理就是動(dòng)態(tài)創(chuàng)建script標(biāo)簽颤枪,然后通過(guò)src進(jìn)行跨域請(qǐng)求,前端提供數(shù)據(jù)處理的回調(diào)函數(shù)淑际,服務(wù)端配合執(zhí)行回調(diào)函數(shù)畏纲,放入要回傳的數(shù)據(jù)

https://blog.csdn.net/qq_34416331/article/details/103571677

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市春缕,隨后出現(xiàn)的幾起案子霍骄,更是在濱河造成了極大的恐慌,老刑警劉巖淡溯,帶你破解...
    沈念sama閱讀 218,755評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異簿训,居然都是意外死亡咱娶,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)强品,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)膘侮,“玉大人,你說(shuō)我怎么就攤上這事的榛∏砹耍” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,138評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵夫晌,是天一觀的道長(zhǎng)雕薪。 經(jīng)常有香客問(wèn)我,道長(zhǎng)晓淀,這世上最難降的妖魔是什么所袁? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,791評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮凶掰,結(jié)果婚禮上燥爷,老公的妹妹穿的比我還像新娘蜈亩。我一直安慰自己,他們只是感情好前翎,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,794評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布稚配。 她就那樣靜靜地躺著,像睡著了一般港华。 火紅的嫁衣襯著肌膚如雪道川。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,631評(píng)論 1 305
  • 那天苹丸,我揣著相機(jī)與錄音愤惰,去河邊找鬼。 笑死赘理,一個(gè)胖子當(dāng)著我的面吹牛宦言,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播商模,決...
    沈念sama閱讀 40,362評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼奠旺,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了施流?” 一聲冷哼從身側(cè)響起响疚,我...
    開(kāi)封第一講書(shū)人閱讀 39,264評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎瞪醋,沒(méi)想到半個(gè)月后忿晕,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,724評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡银受,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評(píng)論 3 336
  • 正文 我和宋清朗相戀三年践盼,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片宾巍。...
    茶點(diǎn)故事閱讀 40,040評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡咕幻,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出顶霞,到底是詐尸還是另有隱情肄程,我是刑警寧澤,帶...
    沈念sama閱讀 35,742評(píng)論 5 346
  • 正文 年R本政府宣布选浑,位于F島的核電站蓝厌,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏鲜侥。R本人自食惡果不足惜褂始,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,364評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望描函。 院中可真熱鬧崎苗,春花似錦狐粱、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,944評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至必尼,卻和暖如春蒋搜,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背判莉。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,060評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工豆挽, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人券盅。 一個(gè)月前我還...
    沈念sama閱讀 48,247評(píng)論 3 371
  • 正文 我出身青樓帮哈,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親锰镀。 傳聞我的和親對(duì)象是個(gè)殘疾皇子娘侍,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,979評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容