Same Origin Policy가 CSRF 공격을 막기 위해 필요하다고 배웠습니다. 그런데 정말 SOP가 꼭 필요한지가 의문입니다. SOP가 없더라도, 쿠키의 SameSite=Strict 옵션을 사용하고, 타 사이트 localstorage에 접근하는 것을 차단 하기만 한다면, 다른 사용자의 자원을 탈취하는 것을 막을 수 있을 것 같은데요. 그 외의 자원에 대한 SOP는 어차피 브라우저 주소창에 주소를 입력하기만 하면 누구나 접근할 수 있는 데이터에 대한 접근을 막을 뿐이지 않나요?
<body> <form:form id="gotoPopupPreview" name="gotoPopupPreview" method="post" action=""> <input type="hidden" name="isPreview" value="Y"> <input type="hidden" name="nttId" value="${searchVO.nttId}"> ...(생략) </form:form> <script> function openPreview(url, target, otherData){ var f = $("#gotoPopupPreview"); f.attr('action', url); f.attr('target', target); ...(생략) window.open('', target); f.submit(); } $("submitBtn").click(function(){ var otherData = '어쩌구저쩌구'; openPreview("http://www.test.or.kr/", '테스트', otherData); }); </script> </body> 위 코드와 같이 form 태그를 만들어두고 스크립트에서 새 창을 열어 submit을 보냈습니다. 근데 서버에서 AccessDeniedException : org.springframework.security.web.csrf.MissingCsrfTokenException: Could not verify the provided CSRF token because your session was not found. result :::: {"result" : "fail", "message" : "Could not verify the provided CSRF token because your session was not found."} 이렇게 csrf 토큰이 없다고 뜨네요.. 처음엔 <input type="hidden" name="$csrf.parameterName}" value="${csrf.token}" /> 이렇게 form태그 안에 직접 넣었다가 form taglib을 쓰면 자동으로 토큰을 넣어준다길래 위와 같이 바꾼건데요, 두 경우 모두 토큰이 잘 들어있는 것으로 보이는데 왜 저런 exception이 뜨는 지 모르겠습니다ㅠ 아무래도 새 창으로 띄우는 게 문제일까요? 이 경우에는 토큰을 어떻게 넣어줘야 할까요? T.T
안녕하세요. 강사님 아래 CSRF 질문과 비슷한 내용인데 잘 이해가 가지 않아서 질문드립니다. 이미 사용자가 로그인되어 있는 인증된 상태라고 한다는 가정하에 사용자는 이미 로그인이 되어 있기 때문에 세션 쿠키가 만들어진 상태이고 공격자가 심어 놓은 URL 의 액션을 실행한다고 해도 사용자의 서비스 시스템은 정상적인 사용자의 액션이라고 판단한다고 하는 부분은 이해가 됩니다. 질문입니다. 여기서도 사용자가 이미 로그인 되어 있을 때 csrf 토큰 값도 만들어져 있어서 가져올 수 있는 것 아닌가요..? 여기 답변이 잘 이해가 안갑니다. 사용자의 서비스 시스템이 해당 액션에 대해 csrf 토큰값을 요구할 경우 공격자의 사이트에는 사용자 서비스에서 사용자에게 발행한 csrf 토큰값을 알수가 없기 때문에 접근이 거부 됩니다.
안녕하세요 선생님? 한창바쁘셔서 답을 해주시기 힘든 상황인것으로 짐작되지만ㅠ 제가 검색으로 도무지 해결할 수 없는 문제같아ㅠㅠ 질문을 남깁니다. aws에서 https까지 적용은 완료했는데, 막상 구축한 웹사이트에서 계정을 만들려고 해보니까 csrf가 에러가 발생합니다... login이든 회원가입이든 post메소드를 보내는 모든 경우에 다음과 같은 에러가 발생합니다. 벌쳐서버에서와 동일하게 작업을 진행했고, 벌쳐서버에서는 문제없이 만들어지는데 ㅠㅠ 어떻게 고쳐야할지를 모르겠네요..
저는 선생님의 오류와는 다르게 아래와 같이 Forbidden (CSRF cookie not set.): /api/login/ 위 오류가 발생되어집니다. 물론 axios . defaults . xsrfCookieName = "csrftoken" ; axios . defaults . xsrfHeaderName = "X-CSRFToken" ; 위 코드는 첨부했는데도 오류가 발생되네요.. 다소 내용이 다른 csfr 오류인데 왜그럴까요 소스코드를 아무리 비교해도 다른 부분은 찾아지지가 않네요 ㅠ
강의 잘 듣고 있습니다. 장고폼 강의 중 "Cross Siste Request Forgery" 섹션에서 jquery를 통한 POST요청시 CSRF전달 방법에 대해 장고 공식문서의 방법을 소개해주셨습니다. 현재(21년 9월 20일) 시점에서 장고 문서를 보니 영상으로 설명주신 3.0 버젼이 아닌 3.2 버젼 문서에서는 jquery에 대한 언급이 사라지고 AJAX에 대한 언급만 남았습니다. 궁금한점은 현재 버젼에서는 설명하신 내용을 3.2버젼에서는 반영할 수 없다고 이해하는게 맞나요? 아직도 jquery는 어느 수준에서는 계속활용되고 잇는 것으로 알고 있는데, 그냥 문서에서 거론을 안하는건지 아니면 지원에서 제외하는 건지 궁금합니다. 감사합니다.