2020년 3월 25일 보안정보 스크래핑

2020년 3월 25일 보안정보 스크래핑 3월 25일 보안정보 스크래핑 ==================================================================== + 주요 취약점 - 메일전송 프로토콜을 이용한 원격 명령어 실행 주의 권고 외 1건 1. 메일전송 프로토콜을 이용한 원격 명령어 실행 주의 권고 최근 OpenSMTPD* 취약점이 발견되는 등 메일전송 프로토콜에서 원격 명령어 실행이 가능하여 주의를 권고함 공격자는 취약점을 악용하여 피해를 발생시킬 수 있으므로, 해결방안을 참고하여 조치 필요 - https://www.krcert.or.kr/data/secNoticeView.do?bulletin_writing_sequence=35302 2. Django 제품 SQL Injection 취약점 보안 업데이트 권고 최근 Django*에서 SQL Injection취약점(CVE-2020-9402)을 악용할 수 있는 개념증명코드(Proof of concept, PoC)가 인터넷상에 공개되어 사용자의 보안 업데이트 필요 - https://www.krcert.or.kr/data/secNoticeView.do?bulletin_writing_sequence=35301 ==================================================================== + 취약점 - Apple Safari 취약점 1. Apple Safari 취약점 Apple Safari security bypass CVE-2020-3885 - https://exchange.xforce.ibmcloud.com/vulnerabilities/178339 Apple Safari security bypass CVE-2020-3887 - https://exchange.xforce.ibmcloud.com/vulnerabilities/178338 Apple Safari inform...

장고 서버와 리액트 프런트를 연동하자(django-cors-header)

장고 서버와 리액트 프런트를 연동하자(django-cors-header)

안녕하세요.

장고와 리액트를 연동하도록 하겠습니다.

장고 프레임워크를 백엔드로 사용하고 리액트를 프런트엔드 사용하고 있습니다.

장고 서버에서는 rest api를 만들고 리액트에서는 이를 호출합니다.

장고 프레임워크에서는 뷰를 만들지 않고 모든 뷰는 리액트에서 담당하게 되는 것이죠. 리액트(뷰 단) -> 장고(서버 단)로 API 호출을 합니다.

로컬 주소는 localhost 또는 도커를 사용한다면 서버는 0.0.0.0이 될 것입니다. 포트는 리액트는 3000번, 장고는 8000번을 사용하게 됩니다. 개발할 때는 프런트-서버 모두 구동한 상태로 개발을 하지만 실서버에서 사용할 8000번 포트를 사용하게 됩니다.

우리가 해야 될 것은 1) 개발에 필요한 리액트에서 장고로 API 호출을 할 수 있게끔 만들고, 2) 실제 상용에서는 8000번(장고 서버)만 구동해도 프런트엔드가 나오게끔 만들어야 됩니다.

그럼 작업을 시작하겠습니다.

1.

python 패키지 중 django-cors-headers 패키지를 설치해주세요.

django는 자신 이외 다른 도메인이 리소스에 접근하는 것을 허락하지 않습니다. 이를 컨트롤하기 위해서 패키지를 설치하는 겁니다.

pip install django-cors-headers

2.

문서의 따라 base.py로 들어가셔서 앱과 미들웨어에 django-cors-headers를 추가해주세요.

## base.py # app에 추가 INSTALLED_APPS = [ ... ' corsheaders ' , ... ] # 미들웨어에 추가 MIDDLEWARE = [ ... ' corsheaders.middleware.CorsMiddleware ' , ... ] # 맨 아래 위치에 추가 CORS_ORIGIN_ALLOW_ALL = True

위의 내용들을 설정을 위해서 추가를 해주시면 됩니다 :)

3.

다음으로 우리는 8000번(장고)만 구동해도 프런트가 보여야 됩니다. 프런트단에서 빌드를 하게 되면 빌드 파일이 만들어집니다. 빌드 파일 안에는 statice파일이 만들어지는데 이를 장고가 가리키도록 해야 됩니다. 장고가 가리키는 방법은 간단합니다.

base.py 안에 STATICFILE_DIRS = [ ... ] 라인이 있습니다. 여기에 빌드된 프런트 파일을 담아주시면 됩니다.

예시를 들자면 다음과 같습니다.

STATICFILES_DIRS = [ str(APPS_DIR.path("static")), # 기존 존재 str(ROOT_DIR.path('front', 'build', 'static')), # 추가 ]

기존에는 장고에서 생성된 static파일이 있었습니다. 하지만 우리의 프런트를 사용하기 위해서 빌드된 static 위치를 위와 같이 추가로 작성을 해주시면 됩니다.

4.

root URL에 url을 추가를 해주세요.

path("", views.ReactAppView.as_view()),

우리는 프런트에서 만든 경로들을 프런트로 보내주기 위해서 가장 아래쪽 위치 작성을 해주세요.

서버에서 만든 api들은 방금 작성한 코드 위에 위치할 것이고 맨 아래 작성한다면 장고에 없는(매칭이 안 되는) url들은 이곳을 경유하여 view를 호출할 것입니다.

5.

위에서 호출할 수 있게끔 뷰 파일을 만들어주세요.

from django.views.generic import View from django.http import HttpResponse from django.conf import settings import os class ReactAppView(View): def get(self, request): try: with open(os.path.join(str(settings.ROOT_DIR), 'front', 'build', 'index.html')) as file: return HttpResponse(file.read()) except: return HttpResponse(status=501,)

작성을 하시면 장고 서버만 구동해도 프런트 쪽으로 호출이 됩니다. (프런트를 빌드 후에 front/build/ 위치에 파일이 있는지 확인을 하고 실행을 시켜주세요.)

6.

마지막으로 리액트 package.json 파일에 proxy를 추가해주세요.

"proxy": "http://0.0.0.0:8000",

프런트에서도 3000번에 url이 없는 경우에 8000번으로 연결이 됩니다. (저는 도커로 구동하여 0.0.0.0입니다. 디폴트 구동 시 localhost로 되어 있습니다.)

이를 설정을 해주시면 로컬에서 프런트-서버 api 호출이 가능하겠습니다.

이상 없이 서버 구동이 되었으며 8000번 호출 시 프런트엔드 뷰가 보이는 모습을 확인하였습니다.

도움이 되셨으면 좋겠습니다.

감사합니다 ^^

참고자료

* django-cors-header 패키지

https://github.com/adamchainz/django-cors-headers

* Cross-origin Resouce Sharing 설명

https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS

from http://junlab.tistory.com/187 by ccl(A) rewrite - 2020-03-07 08:21:00

댓글

이 블로그의 인기 게시물

엑스브레인(XBrain) 기업 정보

django 설치 방법

[aws] deploy Angular app with s3 | AWS S3로 angular 앱 배포하기