CORS安全性:将Access-Control-Allow-Origin设置为“ Origin on Request Header”

格雷格

我不确定关于Access-Control-Allow-Origin和Cookie等方面的安全性方面的要点。

我试图生成一个API,该API允许从任何网站进行身份验证。因此,我需要设置:

Access-Control-Allow-Origin*

Access-Control-Allow-Credentialstrue

由于安全限制,不允许这样做。

但是,将Access-Control-Allow-Origin响应标Origin头设置为请求标头的值会有什么问题呢?那是一个巨大的安全漏洞吗?

例如(节点)

// CORS
app.all('*', function (req, res, next) {
    res.header('Access-Control-Allow-Origin', req.headers.origin);
    res.header('Access-Control-Allow-Headers', 'origin, content-type, accept');
    res.header('Access-Control-Allow-Credentials', 'true');
    res.header('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, OPTIONS');

    if (req.method == 'OPTIONS') {
        res.status(200).end();
    }

    next();
});
银光狐狸

如果您接受API的“默认”会话管理方法,则Access-Control-Allow-Origin和Access-Control-Allow-Credentials标头组合可能会对您的站点造成风险。例如,如果会话是通过Cookie(常见),基本/ NTLM / Kerberos身份验证(发生)或客户端证书(非常罕见)来维护的。

如果您使用Authentication: Bearer标头或类似标题,而浏览器不会自动发送会话令牌,那么这可能不会成为问题(除非您也接受其他方法,并且您的合法用户使用这些方法)。

将Access-Control-Allow-Origin响应标头设置为请求的Origin标头的值会有什么问题?

这与允许来源完全相同,*并且不需要任何攻击者的额外努力。但是,您将能够以类似方式解决此问题。如果您具有允许访问的预先批准的域列表,则可以从已发送的Origin标头中检查该域,如果该域与允许的域匹配,则可以Origin在里面反映出来Access-Control-Allow-Origin

安全风险*在于它将允许任何站点读取可能包含私人用户数据的内容。

由于您允许任何域使用凭据(有效地Access-Control-Allow-Origin: *Access-Control-Allow-Credentials: true联系您的API,因此您还允许其他域可能劫持数据。

例如,当您的受害者登录到您的API时,攻击者会伪造一封电子邮件给您的受害者,以在攻击者的域上观看有趣的视频www.evil.com在播放猫视频时,攻击者域会在处向您的API发出AJAX请求,www.example.com/Get_User_Profile_Details并读取用户的详细信息,包括DOB,家庭住址,电话号码和其他详细信息。隐含Access-Control-Allow-Origin: * Access-Control-Allow-Credentials: true将允许CORS在通常被Same Origin Policy阻止的情况下检索此数据

因此,为防止这种情况,您应该仅输出已Access-Control-Allow-Credentials批准域标头。

我试图生成一个API,该API允许从任何网站进行身份验证。

如果实际上您确实需要从任何网站访问,那么您将需要小心。您可以Origin根据会话ID存储初始身份验证请求(即用户输入其用户名和密码)的。在每个请求上,您都需要检查Origin和,看是否与Origin针对服务器端会话存储的内容相匹配如果是这样,您将输出Access-Control-Allow-Origin: https://www.example.org标头(假设www.example.org是用户登录的位置),否则,您将不会输出Access-Control-Allow-Origin

您可能还会发现这篇文章很有趣

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

ajax post request is No 'Access-Control-Allow-Origin'header is present on the request resource. '

Cross-Origin Request Blocked : & Reason : CORS 헤더 'Access-Control-Allow-Origin'누락

Angularjs post request error No 'Access-Control-Allow-Origin'

Angularjs post request error No 'Access-Control-Allow-Origin'

No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'null' is therefore not allowed access.

Can't find origin in Access-Control-Allow-Origin header in Internet Explorer

Cross-Origin Request Blocked, 헤더 Access-Control-Allow-Origin 누락

How can I expose the custom header 'Access-Control-Allow-Origin' in WebApi.Cors - 5.2.2

Spring Boot-Cross-Origin Request Blocked (이유 : CORS 헤더 'Access-Control-Allow-Origin'누락)

Access-Control-Allow-Origin OPENCART NO SOLUTION

Valid Access-Control-Allow-Origin responses

Is there a way around Access-Control-Allow-Origin?

Access-Control-Allow-Origin 오류?

Cordova No Access-Control-Allow-Origin

Codeigniter의 Access-Control-Allow-Origin

'Access-Control-Allow-Origin'문제

Spring Boot Security No 'Access-Control-Allow-Origin'header is present on the requested resource error 오류

httpd 중복 Access-Control-Allow-Origin with "Header always set"

No 'Access-Control-Allow-Origin' header error yet the POST goes through anyway

Why isn't Ember.js seeing the Access-Control-Allow-Origin header from my server?

Laravel POST 요청 Cors No 'Access-Control-Allow-Origin'

Vue Axios CORS policy: No 'Access-Control-Allow-Origin'

CORS 아니요 'Access-Control-Allow-Origin'

https에 대한 CORS Access-Control-Allow-Origin

간헐적 오류 : Cross-Origin Request Blocked-CORS 헤더 'Access-Control-Allow-Origin'누락

내 httpd.conf 안에 "Header set Access-Control-Allow-Origin"* ""을 추가 할 위치는?

CORS header Allow-Origin missing in POST requests

Vuex Axios CORS 블록 Acess-control-allow-origin

Cloudfront에서 Access-Control-Allow-Origin 설정

TOP 리스트

  1. 1

    셀레늄의 모델 대화 상자에서 텍스트를 추출하는 방법은 무엇입니까?

  2. 2

    Blazor 0.9.0 및 ASP.NET Core 3 미리보기 4를 사용한 JWT 인증

  3. 3

    openCV python을 사용하여 텍스트 문서에서 워터 마크를 제거하는 방법은 무엇입니까?

  4. 4

    C # 16 진수 값 0x12는 잘못된 문자입니다.

  5. 5

    Excel : 합계가 N보다 크거나 같은 상위 값 찾기

  6. 6

    오류 : MSB4803 : MSBuild의 .NET Core 버전에서 "ResolveComReference"작업이 지원되지 않습니다.

  7. 7

    R에서 Excel로 내보낼 때 CET / CEST 시간 이동이 삭제됨

  8. 8

    node.js + postgres : "$ 1"또는 그 근처에서 구문 오류

  9. 9

    확대 후 하이 차트에서 Y 축이 잘못 정렬 됨

  10. 10

    EPPlus에서 행 높이를 설정할 때 이상한 동작

  11. 11

    Ionic 2 로더가 적시에 표시되지 않음

  12. 12

    MS Access 부분 일치 2 테이블

  13. 13

    EPPlus에서 병합 된 셀의 행 높이 자동 맞춤

  14. 14

    ExecuteNonQuery- 연결 속성이 초기화되지 않았습니다.

  15. 15

    ResponseEntity를 사용하고 InputStream이 닫히는 지 확인하는 적절한 스트리밍 방법

  16. 16

    PrematureCloseException : 연결이 너무 일찍 닫혔습니다.

  17. 17

    오류 : "const wchar_t *"유형의 인수가 "WCHAR *"유형의 매개 변수와 호환되지 않습니다.

  18. 18

    Java에서 이미지를 2 색으로 변환

  19. 19

    overflow-y를 사용할 때 스크롤 버벅 거림 줄이기 : scroll;

  20. 20

    Java에서 Apache POI를 사용하여 테이블 크기 및 간격을 단어로 설정하는 방법

  21. 21

    Android Kotlin은 다른 활동에서 함수를 호출합니다.

뜨겁다태그

보관