당신은 멋쟁이, 우리는 장고쟁이~

0%

Django Forms 3편 - GET and POST

GET vs POST Method


GET 과 POST 는

Form 을 다룰때 쓸수 있는 유일한 HTTP Method 입니다.


Django 의 로그인 폼은 POST 메서드를 사용하여 반환 되고,


브라우저는 폼 데이터들을 모아서, 전송을 위한 인코딩을 합니다. 인코딩을 한뒤에 서버로 보낸다음 서버에서 응답을 받습니다.


GET


POST 와 비교했을때, GET 메서드는,


제출된 데이터를 문자열로 모으고,

모아진 문자열들을 URL 을 만들때 사용합니다.


URL 은 데이터가 전송되어야만하는 주소를 가지고 있고,

데이터 키 와 값을 가지고 있습니다.


GET 과 POST 의 다른 사용 목적


시스템의 상태를 바꾸기 위해서 사용되는 요청들 같은 경우,


예를들어, 데이터베이스에 어떠한 변경을 만들어주는 요청들은 POST 를 사용해야 합니다.


*POST 를 사용해야 할때 *

시스템의 상태를 바꾸기 위한 요청을 받을때,

예) 데이터베이스에 변경 사항들을 만들어주는 요청을 다룰때


GET을 사용해야 할때

GET 은 시스템의 상태에 영향을 주지 않는 요청을 처리할때만 사용되어야 합니다



GET 의 위험성


GET 메서드는, 폼에서 입력된 데이터를 받아서 URL 로 만들어 줍니다.


따라서, GET은 패스워드 폼 사용에는 적합하지 않습니다. 왜냐하면, 입력된 패스워드가 URL 에 보여지게 될것이기 때문입니다. 그리고, 브라우저 히스토리와 서버 로그에 순수 텍스트로 나타나게 될겁니다.


보안상 문제가 생기겠죠?



또한, 큰 데이터 양이나, 이미지 같은 이진수 데이터에도 적합하지 않습니다.


GET 요청을 어드민 폼에 사용하는 웹 어플리케이션은 보안상 아주 위험합니다.


공격자들은, 폼의 요청을 조작하여 시스템의 아주 민감한 부분에 접근할수 있습니다.

Django 의 CSRF protection 같은, 다른 보호 방법과 같이 쓰여지는 POST 의 경우, 공격자들의 접근을 좀더 관리 할수 있습니다.



GET 을 사용하면 좋을때


GET 을 사용하면 좋을때

GET Method 는, 웹 검색 폼 같은것에 사용하기 적합합니다

왜냐하면, GET 요청으로 표현되는 URL 들은 쉽게 북마크 될수도 있고,

쉽게 공유될수 있으면서, 쉽게 다시 제출될수 있습니다.