"챌린지 토큰"을 사용하면 어떤 종류의 예방이 추가되는지 이해가 되지 않습니다. 어떤 가치를 무엇과 비교해야 합니까?
OWASP에서:
일반적으로 개발자에게 필요한 것은 이 토큰을 한 번 생성하세요. 현재 세션. 초기화 후 이 토큰의 생성은 다음과 같습니다. 세션에 저장되어 사용됨 이후의 각 요청에 대해 세션이 만료되었습니다.
과정을 제대로 이해하면 이렇게 됩니다.
http://example.com에 로그인하고 이 임의의 토큰이 포함된 세션/쿠키를 만듭니다. 그러면 각 양식에는 양식 제출 시 세션/쿠키와 비교되는 세션의 임의 값도 포함하는 숨겨진 입력이 포함됩니다.
하지만 이것이 무엇을 성취할 수 있을까요? 세션 데이터를 가져와 페이지에 넣고 정확히 동일한 세션 데이터와 비교하지 않습니까? 순환논리처럼 보입니다. 이 기사에서는 "동일 출처 정책"을 따르는 것에 대해 계속 이야기하지만 모든 CSRF 공격은 사용자에게서 시작되고 사용자가 의도하지 않은 작업을 수행하도록 속이기 때문에 이는 의미가 없습니다.
토큰을 모든 URL에 쿼리 문자열로 추가하는 것 외에 다른 옵션이 있나요? 매우 보기 흉하고 비실용적이며 사용자가 북마크를 지정하기 어렵게 만듭니다.
P粉7948519752023-10-24 11:47:30
사기꾼이 당신의 돈을 모두 가져갔고 어쩌면 나가는 길에 Xbox 게임을 했을 수도 있습니다...
CSRF는 기본적으로 다른 사람이 들어와서 당신인 척할 수 있도록 집 문을 열고 열어 두는 것에 의존합니다.
처음으로 집 문을 열면 도어맨이 길고 임의의 숫자가 적힌 종이 한 장을 줄 것입니다.
이제 집에 들어가려면 도어맨에게 그 종이를 보여줘야 들어갑니다.
그래서이제사기꾼이 집에 들어오려고 하면 도어맨이 이렇게 묻습니다.
"종이에 적힌 난수는 무엇인가요?"
사기꾼의 번호가 정확하지 않으면 입장할 수 없습니다. 그는 난수를 정확하게 추측해야 합니다. 이는 매우 어려운 작업입니다. 설상가상으로, 난수는 20분 동안만 유효합니다(예를 들어). 따라서 가장하는 사람은 정확하게 추측해야 하며, 그뿐만 아니라 정답을 얻는 데 20분밖에 주어지지 않습니다. 너무 힘들어요! 그래서 그는 포기했습니다.
물론 이 비유는 다소 무리가 있지만 도움이 되기를 바랍니다.
**crud = (생성, 읽기, 업데이트 삭제)
P粉1210816582023-10-24 00:28:04
공격자는 토큰을 얻을 수 없습니다. 따라서 요청이 적용되지 않습니다.
그누시티즌의 이 글을 추천합니다. CSRF에 대한 꽤 좋은 설명이 있습니다: http://www.gnucitizen.org/blog/csrf-revealed/