nginx 크로스 필드 구멍 문제 처리

3373 단어 linux
본 고가 해결 한 것 은 크로스 오 버 구멍 문제 다.인터넷 의 대부분 은 어떻게 크로스 도 메 인 을 실현 하 는 지, 여 기 는 크로스 도 메 인 을 피 하 는 것 이다.
장면
프로젝트 가 크로스 필드 구멍 을 발견 하 였 습 니 다.origin 을 임의의 도 메 인 이름 으로 설정 하면 데 이 터 를 되 돌려 줄 수 있다 는 것 이다.이것 은 안전 하지 않다.실제 도 메 인 이름 만 데 이 터 를 되 돌려 줄 수 있 을 것 입 니 다.
목적: 임의의 도 메 인 에서 데 이 터 를 접근 할 수 없습니다.
해결 방안
option 설정, 실측 무효
if ($request_method = 'POST') {
    add_header Access-Control-Allow-Origin *; #             
    add_header Access-Control-Max-Age 1728000;
    add_header Access-Control-Allow-Methods GET,POST,OPTIONS;
    add_header Access-Control-Allow-Headers  'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range';
   add_header Content-Type' 'text/plain; charset=utf-8';
   add_header Content-Length 0 ;
   return 204;
}


deny 와 allow 가능 합 니까?
설정:
satisfy all;
allow 127.0.0.1;
allow 192.168.0.1;
deny all;

origin 을 화이트 리스트 로 수정 하 였 는데, 되 돌아 갈 수 없 음 을 발견 하여 그만 둘 수 밖 에 없 었 다.나중에 이 제어 가 클 라 이언 트 ip 인 것 을 발 견 했 습 니 다. 크로스 오 버 오리 진 주소 가 아니 기 때문에 유효 하 든 유효 하지 않 든 모두 틀 렸 습 니 다.
최종 방안, 판단 $httporigin
원래: $httporigin 은 origin 의 값 으로 화이트 리스트 범위 내 에 있 지 않 으 면 403 으로 돌아 갑 니 다.설정:
if ( $http_origin !~* 127.0.0.1|192.168.0.1|\*) { #      \*       *  
        return 403 ;
}

실측 이 유효 하 다.
주: 이 안 에는 정규 표현 식 을 사용 할 수 있 습 니 다.번 호 는 평행봉 을 달 필요 가 없다.
기타
nginx 기본 값 은 도 메 인 을 뛰 어 넘 을 수 없습니다.
설정 에서 크로스 도 메 인 을 여 는 내용 을 찾 지 못 했 습 니 다. 왜 크로스 도 메 인 안전 문제 가 있 습 니까?해결 을 기다리다.
geo 를 사용 하여 추악 한 코드 를 개선 합 니 다.
if 뒤 와 여러 조건, 코드 가 확실히 추 합 니 다.geo 모듈 로 변환 할 수 있 으 며 코드 가 시원 하고 재 활용 이 가능 합 니 다.geo 에 서 는 마스크 등 을 사용 할 수 있 지만 마스크 가 일치 할 수 있 을 지 는 모 르 겠 습 니 다.
access 설정 이 왜 중복 되 는 지
우 리 는 돌아 오 는 메시지 에서 access 속성 이 여러 개 일 수 있다 는 것 을 발견 했다.Access-Control-Allow-Origin: deny Access-Control-Allow-Origin: * Access-Control-Allow-Origin: aaa.com
이것 은 그 가 덮어 쓰 는 관계 가 아니 라 병렬 적 으로 존재 하 는 관계 라 는 것 을 설명 한다.

좋은 웹페이지 즐겨찾기