Python djanjo 의 csrf 크로스 오 버 공격 방지 실험 과정
CSRF 는 무엇 입 니까?
CSRF(Cross-site request forgery),중국어 이름:크로스 오 버 요청 위조,원 클릭 공격/session riding,줄 임 말:CSRF/XSRFCSRF 는 무엇 을 할 수 있 습 니까?
CSRF 공격 을 이렇게 이해 할 수 있 습 니 다.공격 자가 당신 의 신분 을 도용 하여 당신 의 이름 으로 악의 적 인 요 구 를 보 냈 습 니 다.CSRF 가 할 수 있 는 일 은 귀하 의 명의 로 메 일 을 보 내 고 메 시 지 를 보 내 며 귀하 의 계 정 을 훔 치 거나 심지어 상품 을 구 매 하거나 가상 화폐 이 체 를 하 는 것 입 니 다.이 로 인해 발생 하 는 문 제 는 개인 프라이버시 누설 과 재산 안전 을 포함 합 니 다CSRF 허점 현황 은?
CSRF 라 는 공격 방식 은 2000 년 에 이미 외국 의 안전 요원 들 에 의 해 제기 되 었 으 나 국내 에 서 는 06 년 에 야 주 목 받 기 시작 했다.08 년 에 국내외 여러 대형 커 뮤 니 티 와 인 터 랙 션 사이트 에서 각각 CSRF 구멍 이 터 졌 다.예 를 들 어 NYTimes.com(뉴욕타임스),Metafilter(대형 BLOG 사이트),유 튜브 와 바 이 두 HI 등 이다.인터넷 의 많은 사이트 들 이 여전히 이에 대해 무방 비 상태 여서 보안 업계 에 서 는 CSRF 를'잠 자 는 거인'이 라 고 부른다.
참조:https://blog.csdn.net/qq_21956483/article/details/78116094
2.CSRF(웹 폼 제출)
웹 폼 아래 CSRF 탭 을 설정 하면 CSRF 크로스 오 버 공격 을 효과적으로 방지 할 수 있 습 니 다(아래 그림)
{% csrf_token %}
이 폼 을 설정 하지 않 으 면 웹 페이지 에 접근 할 때 접근 이 금 지 됩 니 다(아래 그림)
접근 금지 에 대응 하 는 방법 도 여러 가지 가 있 습 니 다.그 중 하 나 는 설정 파일(settings.py)의 csrf 미들웨어 를 제거 하 는 것 입 니 다.이렇게 하면 원래 접근 이 금 지 된 페이지 도 성공 적 으로 접근 할 수 있 지만 이러한 방법 은 위험 이 매우 큽 니 다.안전 을 고려 하여 이렇게 하 는 것 을 추천 하지 않 습 니 다.
다른 방법 은 보기 층 에 장식 기 를 추가 하 는 것 입 니 다(@csrfexempt)부분 적 인 검 측 을 실현 합 니 다.다시 말 하면 웹 폼 에 csrf 라벨 을 추가 하지 않 아 도 장식 기 를 추가 하면 페이지 에 성공 적 으로 접근 할 수 있 습 니 다.장식 기 내용 만 추가 하고 다른 장식 기 를 추가 하지 않 은 코드 는 접근 이 금 지 된 상태 입 니 다.
3.CSRF(웹 폼 제출)실험
이어서 우 리 는 위 에서 말 한 내용 을 코드 로 한 번 보 여 주 었 다.
우선,app 아래 urls.py 파일 에 하위 루트 를 설정 합 니 다.
from django.urls import path, re_path
from App import views
urlpatterns = [
# csrf
path('register/',views.register,name = 'register'),
]
이어서 보기 함 수 를 작성 합 니 다.
def register(request):
if request.method == "POST": # POST
username = request.POST.get('username') # username
password = request.POST.get('password') # password
print(username,password) # username,password
return render(request,'register.html') # , web register.html
웹 폼(csrf 태그 가 설정 되 지 않 음)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title> </title>
</head>
<body>
<form ation="" method="post">
:<input type="text" name="username"><br>
:<input type="text" name="password"><br>
<input type="submit">
</form>
</body>
</html>
이 때 서비스(python manage.py runserver 8090)를 시작 하면 웹 페이지 에 접근 하면 접근 금지 문자 가 표 시 됩 니 다.그럼 다음은 웹 폼 에 csrf 탭 을 설정 합 니 다.
{% csrf_token %}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title> </title>
</head>
<body>
<form ation="" method="post">
{# #}
{% csrf_token %}
:<input type="text" name="username"><br>
:<input type="text" name="password"><br>
<input type="submit">
</form>
</body>
</html>
웹 페이지 에 다시 방문 하면 사용자 이름,비밀 번 호 를 정상적으로 제출 할 수 있 고 폼 에 csrf 암시 적 의사 난수 가 하나 더 있 습 니 다.CSRF 공격 은 WEB 의 암시 적 인증 메커니즘 에서 비롯 된 것 입 니 다!WEB 의 인증 체 제 는 한 사용자 의 브 라 우 저 에서 요청 한 것 을 보증 할 수 있 지만 이 요청 이 사용자 가 보 낸 것 이 라 고 보장 할 수 없습니다!
CSRF 방어 메커니즘 사고방식 은 클 라 이언 트 페이지 에 위조 무 작위 수 를 늘 리 면 비교적 효과 적 인 크로스 공격 방 어 를 실현 할 수 있다 는 것 이다
4.CSRF(ajax 제출)
ajax 제출,html 에 다음 내용 을 추가 해 야 합 니 다.
🌈1 인용 jquery
🌈2.크로스 오 버 공격 방지 탭 추가
🌈3 ajax 제출 용 button 추가
🌈4 ajax 추가
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title> </title>
{# 🌈1 jquery #}
<script src="https://cdn.bootcdn.net/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
</head>
<body>
<form ation="" method="post">
{# 🌈2 #}
{% csrf_token %}
:<input type="text" name="username"><br>
:<input type="text" name="password"><br>
<!-- {# #}-->
<!-- <input type="submit">-->
<!-- {# 🌈3 ajax #}-->
<input type="button" value=" " id="button">
</form>
</body>
</html>
<script>
{# 🌈4 ajax #}
$("#button").click(function(){
username = $("[name='username']").val();
password = $("[name='password']").val();
csrf = $("[type='hidden']").val();
console.log(username,password,csrf);
{# $.post("/register/") #}
});
</script>
여기 서 ajax 전 삼 방식 에 대해 한 가지 만 소개 하 였 습 니 다.더 깊이 알 고 싶 으 시 면 걸음 을 옮 겨 주세요django 의 ajax 전 삼 두 가지 형식웹 페이지 에 접근 한 후 사용자 이름,비밀 번 호 를 입력 하고 심사 요 소 를 확인 합 니 다.콘 솔 은 입력 한 사용자 이름,비밀번호,그리고 암시 적 의사 임 의 수 를 표시 합 니 다.
html 에 다음 내용 을 계속 추가 합 니 다.
🌈5 포스트 제출
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title> </title>
{# 🌈1 jquery #}
<script src="https://cdn.bootcdn.net/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
</head>
<body>
<form ation="" method="post">
{# 🌈2 #}
{% csrf_token %}
:<input type="text" name="username"><br>
:<input type="text" name="password"><br>
<!-- {# #}-->
<!-- <input type="submit">-->
<!-- {# 🌈3 ajax #}-->
<input type="button" value=" " id="button">
</form>
</body>
</html>
<script>
{# 🌈4 ajax #}
$("#button").click(function(){
username = $("[name='username']").val();
password = $("[name='password']").val();
csrf = $("[type='hidden']").val();
console.log(username,password,csrf);
{# 🌈5 post #}
{# $.post(" ",{ },function( ){}) #}
$.post("/user/register/",{'username':username,'password':password,'csrfmiddlewaretoken':csrf},function(data){
console.log(data)
})
});
</script>
보기 층 에 다음 코드 추가🌟ajax 요청 되 돌리 기
#
# @csrf_exempt
def register(request):
if request.method == "POST":
username = request.POST.get('username')
password = request.POST.get('password')
print(username,password)
# 🌟 ajax
return JsonResponse({'code':1})
# {'code':1}
return render(request,'register.html')
마지막 으로 웹 페이지 에 접근 하면 ajax 요청 이 성공 하고 반환 값{'code':1}을 성공 적 으로 되 돌려 줍 니 다.총결산
파 이 썬 djanjo 의 csrf 크로스 오 버 공격 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 djanjo csrf 크로스 오 버 공격 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 많은 응원 바 랍 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
크로스 사이트 요청 포젤리(CSRF) 개요크로스 사이트 요청 포제리 (CSRF)에 대한 요약. 본래 거부해야 할 무관한 웹 앱으로부터의 요청을 수신·처리해, 유저가 의도하지 않은 처리를 행하게 하는 공격 수법. 사용자의 의도하지 않은 웹 앱에서 처리 수행 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.