Today I learned
- 로그인 세션 관리
- 비밀번호 암호화
로그인 세션 관리
로그인 기능을 구현하려고 하는데 로그인 정보를 어떻게 유지할 수 있을까를 찾아보았는데 flask는 세션을 이용해서 서버에 정보를 유지시킬 수 있었다 세션은 서버에서 보관하고 있는 하나의 오브젝트로 주로 로그인 정보를 유지하기 위해 사용한다 세션을 사용하지 않으면 문제가 발생할까? 로그인 후 페이지를 이동하려고 하면 매번 사용자의 정보를 넘겨주어야하는 문제가 발생하는데 그것을 세션을 통해서 해결할 수 있다
세션과 관련된 데이터를 서버에 저장이 되는데 이 때 많이 비교 되는 대상이 쿠키이다
CookieSession
저장위치 | Client | Server |
저장형식 | Text | Object |
만료시점 | 쿠키 저장시 설정 (설정 없으면 브라우저 종료 시) |
정확한 시점 모름 |
리소스 | 클라이언트의 리소스 | 서버의 리소스 |
용량제한 | 한 도메인 당 20개, 한 쿠키당 4KB | 제한없음 |
서버에 사용자 로그인 정보가 저장되고 이를 바탕으로 목표로 하는 서비스를 개발하려면 세션을 사용해야 한다
from flask import Flask, request, session
@app.route('/login', methods=['GET', 'POST'])
def login():
if request.method == 'POST': # request.method를 통해 GET & POST 인지 확인함.
session['username'] = request.form['username']
return redirect(url_for('index'))
@app.route('/logout')
def logout():
session.pop('username', None)
return redirect(url_for('index'))
비밀번호 암호화
비밀번호 암호화는 저음에는 데이터베이스에있는 정보를 암호화 복호화 해야하는지 알고 AES함수를 이용해서 해결하려고 했는데 조금 검색해 보니까 해싱을 진행해서 암호화를 하는 방법이 있어서 해싱을 이용한 방법을 진행하기로 했다
비밀번호를 암호화 하는이유는 데이터베이스에 비밀번호가 그대로 저장이 되어있으면 데이터베이스가 해킹을 당했을때
비밀번호가 그대로 유출이 된다 그리고 관리자가 나쁜 마음을 먹었다면 유출이 되기 쉽다 제3자가 나의 비밀번호를 확인할 수 없게 만드는것이다 암호화 중 해시함수를 이용해서 데이터를 해싱해 암호화하는 방법이 좋아보인다
해싱한 데이터는 다시 원래의 데이터를 복호화 할 수 없다 꼭 알아두자
해시함수를 이용해 데이터를 암호화 하는데 단점이 있는데 바로 해시충돌이다 해싱을 진행한 값이 서로 같은 값을 가지는 경우가 생기는 것이다 나는 이런 단점을 보완한 파이썬 패키지 bcrypy패키지를 이용하기로 했다
해시의 취약점을 위해 salting과 key stretching방법이 구현되어있다
- salting : 기존 비밀번호 + 특정문자열 -> 으로 해싱을 진행함
- key stretching : 단방향 해시 값을 여러차례 계산해내 해시함 (해시 알고리즘의 빠른 실행 속도 덕분에 채택 가능)
그리고 사용하기 쉬운 장점과 데이터베이스에 저장하기 용이하다
app.config['SECRET_KEY'] = 'secretKey'
app.config['BCRYPT_LEVEL'] = 10
bcrypt = Bcrypt(app)
pw_receive = "123456"
pw_hash = bcrypt.generate_password_hash(pw_receive)
input_pw = "123456"
is_check = bcrypt.check_password_hash(input_pw, pw_receive) # True
'과거공부모음' 카테고리의 다른 글
나의 개발일지 TIL(Today I learned) - 미니프로젝트 (4일) (0) | 2022.12.08 |
---|---|
나의 개발일지 TIL(Today I learned) - 미니프로젝트 (3일) (0) | 2022.12.07 |
나의 개발일지 WIL(Weekly I learned) - 데이터베이스, CS기초, 미니프로젝트 시작 (0) | 2022.12.05 |
나의 개발일지 TIL(Today I learned) - OSI 7계층 특강, 미니프로젝트 시작 (1일) (0) | 2022.12.02 |
나의 개발일지 TIL(Today I learned) - rest API, HTML, CSS, Javascript 특강 (0) | 2022.12.01 |