해싱 Hashing
→ 사용자가 입력한 패스워드를 해싱함수에 대입시켜 암호화 시키는것.
→ 해싱 함수를 직접 작성하는 방향보다 flask-login 라이브러리를 활용하는 방향으로 설정
솔팅 Salting
→ 해싱에서 발생된 문제 ( 사람들이 많이 쓰는 비밀번호의 해싱 값이 동일 )를 해결하기위함.
→ 사용자가 입력한 패스워드 + 랜덤 솔팅 ( 프로젝트에서 8자리 숫자 사용) → 해싱 → 암호화
유효성 검사
→ 아이디와 비밀번호 등 form에 필요한 정보에 대해서 유요한지 검사하는 기능.
→ 로그인 페이지 규칙
→ id, pw 값이 비어있을 경우 유효성 검사 실패
→ 회원가입 페이지 규칙 : 정규식을 사용하여 문자 및 숫자, 특수문자, 자릿수 제한.
→ id : 5~20자의 영문 소문자, 숫자와 특수기호(_),(-)만 사용 가능합니다.
var ID_REGEX = new RegExp("^[a-z0-9_-]{5,20}$");
→ pw : 비밀번호 : 8~16자 영문 대 소문자, 숫자를 사용하세요.
var PW_REGEX = new RegExp("^[a-zA-Z0-9]{8,16}$");
→ 비밀번호 = 비밀번호 확인 성립하지 않을 경우 유효성 검사 실패
→ Id, name, pw, pw확인 이 중 하나라도 비어있을 경우 비어있을 경우 유효성 검사 실패
Page 보호하기
→ 로그인하지 않았을 경우 main페이지 및 다른 페이지로의 이동을 막는 것.
→ 해결 방법1 : flask의 redirect를 if문과 함께 사용.
@app.route('/')
def main():
if not current_user.is_authenticated:
return redirect(url_for('login'))
return render_template('main.html', logged_in=current_user.is_authenticated)
→ 해결 방법2 : flask-login에서 제공하는 함수 사용
@app.route('/secrets')
@login_required
def secrets():
return render_template("secrets.html", name=current_user.name)
JWT
→ 사용자가 Access Token을 API호출시 함께 보내는 방식.
→ 현재 구현하기에는 실력이 뒷받침이 되질 않아 과감하게 포기했습니다. 추가 보완과제로 넣으면 좋을거
같다고 생각합니다.
유효성 검사
→ 프로젝트에서 유효성 검사 순서
: javascript로 input에 실시간으로 피드백 → submit 제출 → flask app.py에서 해싱 및 암호화
위 순서로 진행되나 submit 과정에서 문제가 발생되어 아직 해결하지 못했습니다.
아래 코드와 같이 post 요청을 보낼 시에 문제점들이 생겼습니다.
$.ajax를 사용하여 POST요청 → 페이지 자동 전환X
success 부분에서 별도로 페이지 새로고침 및 전환을 해야함
→ 이부분은 post요청을 보낸 flask에서 해싱 처리를 해야하기 때문에 실패
jquery를 사용할 경우 flask의 redirect, flash 메소드가 작동을 하지 않음.
$submitBtn.addEventListener("click", (event) => {
event.preventDefault();
// 유효성 검사 로직 실행
const isValidForm =
checkRegex($id, $idMsg) === true &&
checkRegex($name, $nameMsg) === true &&
checkRegex($pw, $pwMsg) === true &&
checkRegex($pwConfirm, $pwConfirmMsg) === true;
// 모두 통과할 경우 click 이벤트 발생
if (isValidForm) {
let data = new FormData($register_form);
$.ajax({
type: "POST",
url: "/register",
data: data,
contentType: false,
processData: false,
success: (res) => {
console.log(res);
},
});
}
});
기능 개선
→ 로그인 및 회원가입 페이지에서 보여주는 알림 메시지를 시간이 지나면 자동으로 사라지게 하기.