關(guān)于防盜鏈與跨域訪問(wèn)
最近用阿里云的時(shí)候發(fā)現(xiàn)一些防盜鏈與跨域訪問(wèn)的一些坑,填完坑之后稍微整理一下。
防盜鏈
防盜鏈?zhǔn)抢脼g覽器Http請(qǐng)求頭Referer
埃仪,告訴服務(wù)器誰(shuí)訪問(wèn)資源,由服務(wù)器作判斷,如果符合一定規(guī)則則返回?cái)?shù)據(jù)亿絮,否則返回403。
Flash player跨域訪問(wèn)
Flash player訪問(wèn)指定資源之前麸拄,訪問(wèn)根URL下的crossdomain.xml
派昧,例如訪問(wèn)資源http://test.com/path/to/a.m3u8
之前會(huì)訪問(wèn)http://test.com/crossdomain.xml
,由Flash player解析并判斷是否可以進(jìn)行跨域訪問(wèn)拢切。
crossdomain.xml
的范例
<?xml version="1.0"?>
<!DOCTYPE cross-domain-policy SYSTEM "http://www.adobe.com/xml/dtds/cross-domain-policy.dtd">
<cross-domain-policy>
<site-control permitted-cross-domain-policies="master-only"/>
<allow-access-from domain="*.yy.com"/>
<allow-access-from domain="*.yypm.com"/>
<allow-access-from domain="*"/>
<allow-http-request-headers-from domain="*.yy.com" headers="SOAPAction"/>
</cross-domain-policy>
瀏覽器跨域訪問(wèn)
具體參照http://www.ruanyifeng.com/blog/2016/04/cors.html
Flash player與OSS的跨域訪問(wèn)
如果需要Flash player跨域訪問(wèn)OSS里面的視頻資源蒂萎,需要設(shè)置:
- 編寫crossdomain.xml,放在bucket的根目錄下
- 將域名添加到防盜鏈配置中(如果防盜鏈配置為空失球,則忽略)
- 將域名規(guī)則添加到跨域(Cors)配置規(guī)則中(如果規(guī)則列表為空岖是,則忽略)
OSS與CDN的防盜鏈
OSS和CDN的防盜鏈配置是分離的。配置可以分為下面幾種情況:
- 只配置OSS
安全性一般实苞,可能會(huì)通過(guò)CDN的域名掃描到資源豺撑,而且會(huì)因CDN的緩存配置導(dǎo)致有時(shí)候200有時(shí)候403的情況。 - 只配置CDN
安全性一般黔牵,可能會(huì)通過(guò)OSS的域名掃描到資源聪轿。 - OSS和CDN都配置但不保持一致
很容易混亂,出問(wèn)題很難查猾浦,不建議
陆错。 - OSS和CDN都配置并且保持一致
這是最安全的做法,但保持一致成本較高
金赦。
總的來(lái)說(shuō)音瓷,1和2的安全性是一致的,所以如果安全性不高選擇2夹抗,安全性高則選擇4绳慎。
OSS與CDN的跨域配置
OSS和CDN的跨域配置是分離的。配置可以分為下面幾種情況:
- 只配置OSS
安全性一般,可能會(huì)通過(guò)CDN的域名掃描到資源杏愤,而且這樣做會(huì)因CDN的緩存配置導(dǎo)致有時(shí)候200有時(shí)候403的情況靡砌。 - 只配置CDN
安全性一般,可能會(huì)通過(guò)OSS的域名掃描到資源珊楼。 - OSS和CDN都配置但不保持一致
很容易混亂通殃,出問(wèn)題很難查,不建議
厕宗。 - OSS和CDN都配置并且保持一致
這是最安全的做法画舌,但保持一致成本較高
。
總的來(lái)說(shuō)媳瞪,1和2的安全性是一致的骗炉,所以如果安全性不高選擇2,安全性高則選擇4蛇受。