Django XSS 공격 방지 방법
xss공격: ---->웹 주입
xss 크로스 사이트 스크립트 공격(Cross site script, 약칭 xss)은 일종의'HTML 주입'이다. 공격한 스크립트는 대부분 크로스 필드이기 때문에'크로스 스크립트'라고 부른다.
우리는 SQL 주입과 같은 "주입"(Injection) 을 자주 듣는데, 도대체 "주입"은 무엇입니까?주입은 본질적으로 입력한 데이터를 실행 가능한 프로그램 문장으로 바꾸는 것이다.SQL 주입은 그렇고 XSS도 그렇습니다. 단지 XSS가 일반적으로 주입하는 것은 악의적인 스크립트 코드입니다. 이런 스크립트 코드는 합법적인 사용자의 데이터, 예를 들어 쿠키 정보를 얻을 수 있습니다.
PS: 사용자가 입력한 데이터를 안전한 형식으로 표시하면 페이지에만 문자열을 표시할 수 있습니다.
django 프레임워크에서 데이터 표시 보안 방식을 표시합니다. (그러나 이런 조작은 안전하지 않습니다!):
2. 테스트 코드
XSS 공격을 수행하려면 다음 두 가지 조건이 필요합니다.
1. 웹 페이지에 악성코드를 주입해야 한다.
둘째, 이러한 악성코드는 브라우저에서 성공적으로 실행될 수 있다.
해결 방법:
1. 하나의 방법은 폼 제출이나 URL 매개 변수가 전달되기 전에 필요한 매개 변수를 필터하는 것이다.
2. 백그라운드에서 데이터베이스에서 가져온 문자열 데이터를 필터링하여 키워드를 판단한다.
3. 안전 메커니즘을 설정한다.
django 프레임워크: 내부 메커니즘이 기본적으로 막았습니다.전송된 문자열이 안전하지 않으면 렌더링되지 않고 문자열로 표시됩니다.만약 손이 싸게 safe를 썼다면 위험합니다. safe를 사용하려면 백그라운드에서 렌더링할 문자열을 필터해야 합니다.그래서 개발할 때는 반드시 안전 메커니즘을 신중하게 사용해야 한다.특히 사용자가 제출할 수 있고 렌더링할 수 있는 내용!!!
여기는 xss 빈틈이 없는 글쓰기입니다. 왜냐하면 django가 이미 공격 방지 조치를 했기 때문입니다.
index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1> </h1>
{% for item in msg %}
{# <div>{{ item|safe }}</div>#} # , ,|safe , <script> alert(123)</script>
<div>{{ item}}</div>
{% endfor %}
</body>
</html>
conment.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form action="/comment/" method="POST">
<input type="text" name="content">
<input type="submit" value=" ">
</form>
</body>
</html>
views.py
from django.shortcuts import render,HttpResponse
# Create your views here.
msg = []
def comment(request):
if request.method == "GET":
return render(request,"comment.html")
else:
v = request.POST.get("content")
msg.append(v)
return render(request,"comment.html")
def index(request):
return render(request,"index.html",{"msg":msg})########################################################
def test(request):
from django.utils.safestring import mark_safe
temp = "<a href='http://www.baidu.com'> </a>"
newtemp = mark_safe(temp) # |safe , , , test.html {{ temp }} , a
return render(request,'test.html',{'temp':newtemp})
urls.py
from app01 import views
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^index/', views.index),
url(r'^comment/',views.comment),
]
------------------------------------######################_-------------------------------다음은 사용자 입력 판단을 하여 특수 문자가 있는지 검사한 것이다
views.py
from django.shortcuts import render,HttpResponse
# Create your views here.
msg = []
def comment(request):
if request.method == "GET":
return render(request,"comment.html")
else:
v = request.POST.get("content")
if "script" in v:
return render(request, "comment.html",{'error':' '})
else:
msg.append(v)
return render(request,'comment.html')
def index(request):
return render(request,"index.html",{"msg":msg})
index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1> </h1>
{% for item in msg %}
<div>{{ item|safe }}</div>
{# <div>{{ item}}</div>#}
{% endfor %}
</body>
</html>
comment.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form action="/comment/" method="POST">
<input type="text" name="content">
<input type="submit" value=" ">{{ error }}
</form>
</body>
</html>
이상은 본문의 전체 내용입니다. 여러분의 학습에 도움이 되고 저희를 많이 응원해 주십시오.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 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에 따라 라이센스가 부여됩니다.