1.漏洞報(bào)告
- 漏洞名稱: CORS 跨域
- 漏洞等級(jí): 中危
- 漏洞證明: Origin從任何域名都可成功訪問(wèn),未做任何限制。
- 漏洞危害: 因?yàn)橥床呗缘拇嬖?,不同源的客戶端腳本不能訪問(wèn)目標(biāo)站點(diǎn)的資源,如果目標(biāo)站點(diǎn)并配置不當(dāng),沒(méi)有對(duì)請(qǐng)求源的域做嚴(yán)格限制,導(dǎo)致任意源都可以訪問(wèn)時(shí),就能在 CORS 跨域漏洞問(wèn)題,CORS 漏洞一般用于竊取用戶敏感數(shù)據(jù),如果用戶點(diǎn)擊觸發(fā)了而已頁(yè)面,就會(huì)被盜取數(shù)據(jù)。
-
解決建議: 修復(fù)方法是合理配置 CORS,判斷 Origin 是否合法。具體說(shuō)就是請(qǐng)求頭不要配置
Access-Control-Allow-Origin
為*
或null
。
2.漏洞復(fù)現(xiàn)
復(fù)現(xiàn)方式為在 Header 中指定 Origin 請(qǐng)求頭,看是否可以請(qǐng)求成功。
curl -H 'Origin:http://aaa.bbb' http://10.14.32.138:80
發(fā)現(xiàn)確實(shí)可以正常請(qǐng)求成功,開(kāi)始修復(fù)。
3.Nginx 修復(fù)
3.1 添加請(qǐng)求頭
location /myProject/api/ {
add_header 'Access-Control-Allow-Origin' 'http://10.14.32.138:80' always;
add_header 'Access-Control-Allow-Credentials' 'false' always;
include proxy_params;
proxy_pass http://localhost:8081/;
access_log /tmp/httplogs/uat-mobileapi-access.log main;
error_log /tmp/httplogs/uat-mobileapi-error.log;
}
添加完畢,提交復(fù)測(cè),發(fā)現(xiàn)即使添加了請(qǐng)求頭配置,當(dāng)origin為其他域名時(shí)仍能正常訪問(wèn)。
3.2 配置origin限制
進(jìn)一步通過(guò)添加 origin 限制來(lái)修復(fù),其他域名訪問(wèn)時(shí),直接返回 403 狀態(tài)碼。
location /myProject/api/ {
if ($http_origin !~* "(www.test.com|10.14.32.138)" ) {
return 403;
}
add_header 'Access-Control-Allow-Origin' 'http://10.14.32.138:80' always;
add_header 'Access-Control-Allow-Credentials' 'false' always;
include proxy_params;
proxy_pass http://localhost:8081/;
access_log /tmp/httplogs/uat-mobileapi-access.log main;
error_log /tmp/httplogs/uat-mobileapi-error.log;
}
配置之后,發(fā)現(xiàn)雖然跨域請(qǐng)求被限制住了,但是頁(yè)面上的請(qǐng)求也無(wú)法訪問(wèn)了。
排查發(fā)現(xiàn),頁(yè)面上請(qǐng)求時(shí)不會(huì)傳 Origin 請(qǐng)求頭,所以也返回 403 狀態(tài)碼了。
2.3 調(diào)整origin限制
需要將 Origin 限制改為 Origin 為空也可以正常訪問(wèn)。
location /myProject/api/ {
set $allow_cors 0;
# 判斷不為空
if ($http_origin) {
set $allow_cors 1;
}
# 判斷不在白名單內(nèi)
if ($http_origin !~* "(www.test.com|10.14.32.138)" ) {
set $allow_cors "${allow_cors}1";
}
# 判斷不為空 且 不在白名單內(nèi),返回403
if ($allow_cors = "11") {
return 403;
}
add_header 'Access-Control-Allow-Origin' 'http://10.14.32.138:80' always;
add_header 'Access-Control-Allow-Credentials' 'false' always;
include proxy_params;
proxy_pass http://localhost:8081/;
access_log /tmp/httplogs/uat-mobileapi-access.log main;
error_log /tmp/httplogs/uat-mobileapi-error.log;
}
配置之后,復(fù)測(cè)通過(guò),頁(yè)面也可以正常訪問(wèn)了。
整理完畢,完結(jié)撒花~
參考地址:
1.Nginx配置origin限制跨域請(qǐng)求(應(yīng)對(duì)等保),https://blog.csdn.net/qq_20236937/article/details/128640137
2.Nginx:如果頭不存在或錯(cuò)誤,則拒絕請(qǐng)求,https://www.it1352.com/1679888.html文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-406068.html
3.NGINX實(shí)現(xiàn)IF語(yǔ)句里的AND,OR多重判斷,https://blog.51cto.com/qiangsh/1967549文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-406068.html
到了這里,關(guān)于Nginx使用“邏輯與”配置origin限制,修復(fù)CORS跨域漏洞的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!