Loading...

JavaScript / / 2022. 3. 15. 16:13

자바스크립트 6강. CORS 정책

반응형

 

 

해당 id의 포인트를 10만점 올려주는 메서드가 있다.

 

@GetMapping(/point/{id})

 

실제 실행될 쿼리 : update

 

인증이 필요한 요청이다.

아무나 update 할 수 있으면 안되기 때문에

관리자 아이디인지 확인해야한다!

 

로그인했으면 세션에 오브젝트가 하나 들어있을 텐데

이 세션에 아이디가 admin이면 update가 가능하게 하고

세션에 아무 값도 없거나, username이 admin이 아니면 튕겨내야 한다!

 

id가 23번인 사람을 admin이 아닌데도

10만점을 올릴 수 있는 방법이 있다.

어떻게?

 

GET:/point/23

 

1. postman 이용

2. 브라우저 주소창 이용

3. 하이퍼링크 a 태그 

4. form 태그 요청

 

데이터베이스의 데이터에 영향을 미치는 write 메서드를 사용할 때는

절대 get 요청을 해서는 안된다.

공격에 매우 취약하기 때문이다.

 

post 요청을 쓸까? form태그로 공격이 가능하다.

 

update는 put 매핑 쓰자.

 

XSS(Cross Site Scripting) 크로스 사이트 스크립팅

 


 

그렇다면 put 요청은 공격으로부터 안전할까?

 

자바스크립트 코드로 공격한다.

fetch( ) 함수를 사용해서!

 

자바스크립트로 XSS 공격을 할 수 있다.

 

서버 주소가 10.1.5.7:8080이라고 할 때

클라이언트가 서버에 /loginForm을 요청하면

주소창에 요청한 그대로 주소가 남아 있을 것이다.

 

http://10.1.5.7:8080/loginForm이라고!

그리고 loginForm 페이지를 응답받은 후

자바스크립트로 재요청하면 받아준다.

 

자바스크립트 요청이라고 다 막는 게 아니다.

언제 막냐?

 

도메인이 다를 때 막는다.

도메인이 다르다는 것은 포트번호까지 포함이다.

(IP주소+포트번호)

 


 

CORS(Cross-Origin Resource sharing) 정책

외부 도메인에서 자바스크립트 요청이 들어오면 거부한다.

 

디폴트가 블락이다.

 

클라이언트는 브라우저라는 프로그램을 이용해 서버에게 자바스크립트 요청을 하는데

서버가 헤더에 cors 정책에 대해 아무것도 안 남기고 응답하면

브라우저 툴 자체에서 블락이 걸려있다.

응답을 받지 않는다.

 

 

서버 입장에서

도메인 주소가 다른데 자바스크립트 요청이 왔네?

이때 블락이 걸리는 게 아니라

서버는 응답을 했지만 헤더를 확인한 브라우저가

응답을 받기 전에 브라우저에서 블락을 거는 것이다.

 

서버가 헤더에 cors 정보를 남겨놓으면

브라우저가 열어준다.

 

postman이나 핸드폰 어플로 자바스크립트 요청을 하면 막지 않는다.

 

같은 도메인이 아닌 브라우저가 요청했을 때만 자바스크립트 요청을 막는다!

 

중요!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

 

 


 

 

서버는 언제든지 공격을 당할 수 있기 때문에

애초에 안전하지 않은 요청을 막아야 한다.

 

cors 관련 헤더들이다.

서버가 브라우저에게 정보를 알려주는 것이다.

~~ 도메인은 허용할게

~~ 요청만 허용할게

 

보고 지나가자. 자세히 몰라도 된다.

 

@CrossOrigin을 걸어보면 자원을 응답해준다.

그럼 브라우저가 읽어준다.

 

크로스 오리진은 필터에 걸 수도 있고

컨트롤러 자체에 걸 수도 있고

메서드에만 걸 수도 있다.

 

자바스크립트 요청만 얘기하는 것!!!

 

 

 

[출처]

 

https://cafe.naver.com/metacoding

 

메타코딩 : 네이버 카페

코린이들의 궁금증

cafe.naver.com

메타 코딩 유튜브

https://www.youtube.com/c/%EB%A9%94%ED%83%80%EC%BD%94%EB%94%A9

 

메타코딩

문의사항 : getinthere@naver.com 인스타그램 : https://www.instagram.com/meta4pm 깃헙 : https://github.com/codingspecialist 유료강좌 : https://www.easyupclass.com

www.youtube.com

 

반응형