Django crsf의 소스 프로세스 및 분석 중간부품이 CSRF 공격을 예방하는 방법
결론: 비교한 것은 바로 비교(cookie에서 csrftoken의 값)와 (순수한 폼 제출 중인 csrfmiddlewaretoken이나 JS가 보낸 요청 헤더의 X-CSRFtoken)의 값이 같은지 여부이다. 전체 과정은 데이터베이스에 있는 것과 비교되지 않았다.따라서 앞뒤가 분리된 후 백엔드에 템플릿 렌더링이 없습니다. 만약에 앞쪽에서 POST 요청을 보내려면 앞쪽 엔지니어가 수동으로 요청 헤더에 X-CSRFtoken을 추가해야 합니다. 대응하는 값은 js독쿠키를 통해 얻을 수 있습니다.
상기 결론에 근거하여 당신은 코드 구조 요청을 통해 상술한 검사를 충족시킬 수 있으며, 요청 헤더의 쿠키의 csrftoken과 요청 헤더의 X-CSRFtoken의 값은 마음대로 기입할 수 있습니다.
url = "http://192.168.56.101:8082/data/student_data/"
input_dict = {'name':'cheng', 'age':23}
res = requests.post(url, data=input_dict,
# headers={'X-CSRFToken':'F0S0sHIXOAF9pjwpn78EB5ZjxvOO4c7I','Cookie': 'csrftoken=F0S0sHIXOAF9pjwpn78EB5ZjxvOO4c7I'})
headers={'X-CSRFToken':'mycrsftokenabc','Cookie': 'csrftoken=mycrsftokenabc'})
print 'type(res.headers) = {0}, res.headers = {1}'.format(type(res.headers), res.headers)
print 'type(res.text) = {0}, res.text = {1}'.format(type(res.text), res.text)
print 'res.status_code = {0}'.format(res.status_code)
Django 프레임워크의 CSRF 인증 메커니즘을 이해한 후에 이 메커니즘이 CSRF 공격을 어떻게 회피하는지 이야기한다. CSRF 공격 공격 원리와 과정은 다음과 같다.
주의 5단계: 공격 코드가 사이트 A의 쿠키 정보를 가지고 사이트 A에 요청(공격 코드는 브라우저에서 실행되기 때문에 사이트 A에 요청을 보낼 때 사이트 A의 쿠키를 휴대하고 sessionid와crsftoken을 휴대한다): 만약에 Django의 백엔드에서 django를 사용할 수 있다면.middleware.csrf.CsrfViewMiddleware 중간부품을 사용하면 요청이 종료됩니다.POST 요청에는 csrfmiddlewaretoken이 없고 요청 헤더의 쿠키에는 csrftoken이 있습니다.그래서 백엔드에서 csrfmiddlewaretoken을 얻을 수 없습니다.그리고 요청 헤더에서 HTTP 가져오기를 시도해 보세요X_CSRFTOKEN도 값을 얻지 못했기 때문에 자연스럽게 쿠키의crsftoken과 비교하면 실패하고 요청이 실패합니다!
이 가능하다, ~할 수 있다, ~할 수 있다, ~할 수 있다, ~할 수 있다, ~할 수 있다,...middleware.csrf.CsrfView Middleware 중간부품의 검사입니다. 그러나 요청에sessionid가 없습니다. (코드가 로컬에서 실행되기 때문에 사이트 A의sessionid가 무엇인지 알 수 없습니다.) session 검증에 실패할 수 있습니다.
아마도 당신은 js 코드로 사이트 A의 쿠키에 있는 내용을 사이트 B에 보낼 수 있는 방법이 없을까 생각했을 것입니다.사실은 없습니다. 이것은 브라우저 차원에서 격리가 있기 때문입니다.
그래서 현재는 Django 프레임워크가 매우 엄격해 보입니다. 브라우저의 쿠키에crsftoken과sessionid 이중 인증을 써서 사이트의 안전을 확보합니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Django 라우팅 계층 URLconf 작용 및 원리 해석URL 구성(URLconf)은 Django가 지원하는 웹 사이트의 디렉토리와 같습니다.그것의 본질은 URL과 이 URL을 호출할 보기 함수 사이의 맵표입니다. 위의 예제에서는 URL의 값을 캡처하고 위치 매개 변수로...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.