본문 바로가기

분류 전체보기

(146)
Cross-Site Request Forgery(CSRF) CSRF 공격이란 클라이언트가 서버를 공격하는 것을 뜻한다. 웹 사이트(서버)가 신뢰하는 클라이언트로부터 승인되지 않은 명령이 전송되는 악의적인 공격이다. 시나리오 예시 Mallory는 Bob의 은행의 웹 사이트 스크립트를 참조하는 HTML 이미지를 만들었다. Bob의 은행이 그의 인증 정보를 쿠키로 갖고 있고, 그 쿠기가 만료되지 않았다면, Bob의 브라우저는 그의 쿠키와 인출 양식을 제출할 것이다. 즉 Bob의 승인 없이 거래를 승인하게 되는 것이다. 만약 사용자가 비밀번호 변경 시 서버가 기존 비밀번호 확인을 하지 않는다면? 공격자는 임의로 사용자의 비밀 번호를 바꿀 수 있다. 위 시나리오를 보고 잘 이해가 안 될 것이다. CSRF 공격 과정에 대해 차근차근 이해해 보자. 1. 사용자가 보안이 취약..
[Django] 장고 settings.py 시크릿키 등 중요정보 ini파일로 관리하기 깃헙 같은 곳에 프로젝트를 올릴 때 중요한 정보들은 올리지 않고 따로 관리해 주어야 한다. 여러 방법 중 하나인 ini 파일을 생성해서 중요 정보를 저장하고, 불러와서 사용하는 방법에 대해 배워보자. 파이썬 표준 라이브러리에 ini 파일 읽는 패키지가 있다. import configparser 우선 ini 파일을 하나 만들어 보자. settings의 secret key는 노출되면 안되기 때문에 이 정보를 ini파일에 다음과 같이 저장한다. ini 파일은 프로젝트 폴더에 저장한다. (manage.py가 저장되어 있는 폴더) [SETTING] SECRET_KEY = 당신의비밀키 이제 settings.py로 돌아가서 ini파일에 저장해둔 secret key를 가져오자. import configparser im..
(작성중) 장고 배포 하기 (gunicorn, Nginx) 우리가 그동안 장고를 실행할 때 python manage.py runserver 를 입력하여 개발 하는 도중 서버를 실행하여 각종 테스트를 해봤다. 하지만 장고의 내장서버를 이용하여 실제로 운영하는데에는 많은 한계가 있다. 내장 서버는 오직 개발 테스트 용으로만 써야 한다. Now’s a good time to note: don’t use this server in anything resembling a production environment. It’s intended only for use while developing. 장고 튜토리얼에 게시되어 있는 글이다. 이것을 실제 배포용 서버로 사용하지 마라. 오로지 개발을 위해 사용하라. 라고 되어 있다. 자 그럼 이제 실제로 배포를 하기위해 필요한 것들을..
(작성중) 장고 mysql python에서 mysql과 통신하기 위한 패키지 설치 pip install mysqlclient settings.py 수정 DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': str(BASE_DIR / 'db.mysql'), 'USER': 'dhdgn', 'PASSWORD': '12341234', 'HOST': 'localhost', 'PORT': '3306', } }
[Django] 장고 기본 사용법 앱 생성 python manage.py startapp photo settings.py의 INSTALLED_APPS에 photo 추가. 작성 순서는 본인이 편한대로 하면 된다. 필자는 다음과 같은 순서로 작성해보겠다. 1. model 2. views 3. template 4. urls photo/models.py from django.db import models class Photo(models.Model): title = models.CharField(max_length=50) author = models.CharField(max_length=50) image = models.CharField(max_length=200) description = models.TextField() price = mod..
다리를 지나는 트럭 C++ (프로그래머스 스택/큐) 문제 설명 트럭 여러 대가 강을 가로지르는 일차선 다리를 정해진 순으로 건너려 합니다. 모든 트럭이 다리를 건너려면 최소 몇 초가 걸리는지 알아내야 합니다. 다리에는 트럭이 최대 bridge_length대 올라갈 수 있으며, 다리는 weight 이하까지의 무게를 견딜 수 있습니다. 단, 다리에 완전히 오르지 않은 트럭의 무게는 무시합니다. 예를 들어, 트럭 2대가 올라갈 수 있고 무게를 10kg까지 견디는 다리가 있습니다. 무게가 [7, 4, 5, 6]kg인 트럭이 순서대로 최단 시간 안에 다리를 건너려면 다음과 같이 건너야 합니다. 경과 시간 다리를 지난 트럭 다리를 건너는 트럭 대기 트럭 0 [] [] [7,4,5,6] 1~2 [] [7] [4,5,6] 3 [7] [4] [5,6] 4 [7] [4,5..
[Django] 장고 HTML URL 경로 설정하는 방법 Django를 이용해 웹 사이트를 제작하면 여러 페이지가 나오게 된다. 이때 다른 페이지로 가기 위해 HTML 문서에서는 많은 하이퍼 링크를 만들게 되는데, 간단하게 절대경로를 만들어 넣을 수 있다. gogo 물론! 이렇게 해도 되지만, 우리는 웹을 제작하면서 경로 이름을 바꾸는 경우가 종종 있다. 이 때 하나의 경로 이름을 바꾸게 된다면 이 경로에 하이퍼링크를 걸고 있는 모든 HTML 문서를 수정해줘야 하는 불편함이 발생한다. 이런 문서들을 찾기도 힘들고.. 시간도 많이 버리게 된다. 이런 문제를 해결하기 위해 등장한 것이 바로 url 탬플릿 태그 이다! urls.py에 다음과 같이 경로를 줄때 옵션으로 이름공간을 정해 줄 수 있다. from django.urls import path from . im..
(작성중) 장고 JWT 이용하여 회원가입, 로그인 기능 구현 (Django JWT Token) JWT(JSON Web Token)란? http 프로토콜을 통해 사용자는 웹사이트를 이용한다. 그런데 이 http 프로토콜의 특징 중 하나가 바로 stateless, 즉 상태 유지를 하지 않는다는 것이다. 이렇게 되면 사용자는 매번 사이트의 다른 페이지에 접근할 때마다 로그인을 해주어야 하는데 등의 큰 불편함이 있다. 예를 들어 네이버에서 로그인을 하고 블로그 페이지를 누르면 로그아웃이 되어 다시 로그인을 해주어야 하는 등의 문제가 발생한다. 이와 같은 문제들을 해결하기 위해 세션, 쿠키, 토큰 등의 기능을 이용하는 것이다. 관련한 자세한 내용은 다음 포스팅을 참조하길 바란다. https://hooeverything.tistory.com/12 여러 가지 방법 중 관리가 편하고, 서버 측 자원이 많이 소모..