JSON 웹 서비스는 CSRF 공격에 취약합니까?
요청 및 응답 콘텐츠에 JSON을 독점적으로 사용하는 웹 서비스를 구축하고 있습니다 (즉, 양식 인코딩 된 페이로드 없음).
다음과 같은 경우 웹 서비스가 CSRF 공격에 취약합니까?
POST
예를 들어 최상위 JSON 개체가없는 모든 요청{"foo":"bar"}
은 400으로 거부됩니다. 예를 들어POST
콘텐츠42
가 포함 된 요청은 거부됩니다.상관
POST
이외의 콘텐츠 유형의 요청application/json
, 예를 들어 400으로 거부된다는POST
콘텐츠 유형 요청application/x-www-form-urlencoded
따라서 거부 될 것이다.모든 GET 요청은 안전 하므로 서버 측 데이터를 수정하지 않습니다.
클라이언트는 세션 쿠키를 통해 인증되며, 웹 서비스는 JSON 데이터와 함께 POST를 통해 올바른 사용자 이름 / 암호 쌍을 제공 한 후 제공합니다
{"username":"user@example.com", "password":"my password"}
.
부수적 인 질문 : PUT
및 DELETE
요청이 CSRF에 취약한 적이 있습니까? 대부분의 (모든?) 브라우저가 HTML 양식에서 이러한 메서드를 허용하지 않는 것 같아서 묻습니다.
편집 : 항목 # 4를 추가했습니다.
편집 : 지금까지 좋은 댓글과 답변이 많지만,이 웹 서비스가 취약한 특정 CSRF 공격을 제공 한 사람은 아무도 없습니다.
때문에 임의의 매체 유형의 임의 CSRF 요청을 단조하여 효과적으로에만 가능 XHR 함께 형태의 방법은 GET 제한되며 POST 및 형태의 POST 메시지 본문은 또한 세 가지 형식에 제한 application/x-www-form-urlencoded
, multipart/form-data
및text/plain
. 그러나 양식 데이터 인코딩을 사용 text/plain
하면 유효한 JSON 데이터를 포함하는 요청을 위조 할 수 있습니다 .
따라서 유일한 위협은 XHR 기반 CSRF 공격에서 비롯됩니다. 그리고 둘 중 하나 일 경우에만 성공할 것입니다.
- 동일한 출처에서 실행되므로 기본적으로 자신의 사이트 (예 : XSS)에서
- 다른 출처에서 실행되고 서버가 이러한 교차 출처 요청을 허용합니다 .
둘 다 제거 할 수 있다면 웹 서비스가 CSRF에 취약하지 않은 것입니다. 적어도 웹 브라우저를 통해 수행되는 것은 아닙니다.
예, 가능합니다. 307 리디렉션을 대상 서버로 다시 대상 컴퓨터로 보내는 공격자 서버를 설정할 수 있습니다. Form을 사용하는 대신 Flash를 사용하여 POST를 보내야합니다.
참조 : https://bugzilla.mozilla.org/show_bug.cgi?id=1436241
Chrome에서도 작동합니다.
Ajax를 사용하여 JSON 기반 Restful 서비스에서 CSRF를 수행 할 수 있습니다. 나는 이것을 응용 프로그램에서 테스트했습니다 (Chrome과 Firefox 사용). preflight 요청을 취소하려면 contentType을 text / plain으로, dataType을 JSON으로 변경해야합니다. 그런 다음 요청을 보낼 수 있지만 세션 데이터를 보내려면 ajax 요청에 withCredentials 플래그를 설정해야합니다. 여기에서 더 자세히 논의합니다 (참조가 포함되어 있음).
http://wsecblog.blogspot.be/2016/03/csrf-with-json-post-via-ajax.html
포인트 3과 관련하여 약간의 의구심이 있습니다. 서버 측의 데이터를 변경하지 않기 때문에 안전하다고 생각할 수 있지만 데이터는 여전히 읽을 수 있으며 도난 당할 위험이 있습니다.
http://haacked.com/archive/2008/11/20/anatomy-of-a-subtle-json-vulnerability.aspx/
다음과 같은 경우 웹 서비스가 CSRF 공격에 취약합니까?
예. 여전히 HTTP입니다.
PUT 및 DELETE 요청이 CSRF에 취약합니까?
예
대부분의 (모든?) 브라우저는 HTML 양식에서 이러한 메서드를 허용하지 않는 것 같습니다.
브라우저가 HTTP 요청을 만드는 유일한 방법이라고 생각하십니까?
참고 URL : https://stackoverflow.com/questions/11008469/are-json-web-services-vulnerable-to-csrf-attacks
'IT TIP' 카테고리의 다른 글
WebSocket 요청-응답 서브 프로토콜 (0) | 2020.11.05 |
---|---|
Hibernate 주석을 사용하여 외래 키 제약을 어떻게 표시 할 수 있습니까? (0) | 2020.11.05 |
WordPress 단축 코드에서 AJAX를 사용하는 방법? (0) | 2020.11.05 |
[사실] 속성은 무엇입니까? (0) | 2020.11.05 |
Python : 하위 패키지 또는 하위 모듈 가져 오기 (0) | 2020.11.05 |