기록
  • 1214 WebServer 7일차
    2023년 12월 14일 14시 49분 58초에 업로드 된 글입니다.
    작성자: 삶은고구마

    조회 외에 

    등록,수정,삭제 시 confirm alert는 꼭 끼워넣자.

    특히, 회원 삭제 시 "정말 탈퇴하시겠습니까?"  경고&알림을 해줘야함.

     

    https://kotlinworld.com/329

     

    리다이렉트(Redirect)와 포워드(Forward)의 차이는 무엇인가?

    리다이렉트와 포워드 특정 URL 접속 시 리다이렉트 또는 포워드가 일어나게 되면 작업 중인 페이지가 전환된다. 리다이렉트와 포워드는 페이지가 전환된다는 점에서 비슷한 역할을 한다. 하지만

    kotlinworld.com


    목차

    -패스워드 암호화

    -관리자 페이지에서 회원 목록 출력

    -관리자 페이지에서 회원 검색

     아이디, 이름, 이메일 별로 검색 가능하며 일부만 입력해도 해당 문자열을 포함한 결과 출력

     ex)아이디 - gom 검색 시 gom123 nongdamgom77 회원이 검색 결과로 출력

     

     

    비밀번호 - SHA512 암호화 적용하기

    1.단방향 (비밀번호)

    1234->QW23RWR(HASH값)

    한 번 암호화되면 되돌릴 수 없음. 원래 값이 무엇인지 알 수 없다.

    여기서 드는 의문점

    그러면 암호화한 뒤에 원래 비밀번호와 어떻게 대조하여 로그인하는것인지?

    1.사용자가 로그인 할 때 입력한 비밀번호를 매번 암호화한다. 

    2.이미 암호화된 비밀번호와 이번에 입력한 암호화된 비밀번호를 비교한다.

    3.일치/불일치를 확인한다.

     

    2.양방향 (전화번호, 주민등록번호)

    1234<->3wtwtt

    암호화, 복호화가 가능.

     


    SHA512를 이용한 비밀번호 암호화 예제

    public static String getEncryptedPassword(String password, String salt)
        {
            String encryptedPassword = null;
            //1.암호화 (hasing)
            try
            {
                MessageDigest md = MessageDigest.getInstance("SHA-512");
                //입력한 비밀번호를 byte배열로 변환한다.
                byte[] input = password.getBytes("UTF-8");
                //먹인다.
                md.update(input);
                //소화된 결과물을 확인한다.ㅋ
                byte[] output = md.digest();//이진데이터가 나옴
    
                //2.인코딩 (encoding) 단순 변환작업
                /**
                 * 컴퓨터 분야에서 쓰이는 Base 64란.. 8비트 이진 데이터를 문자 코드에 영향을 받지 않는
                 * 공통 ASCII 영역의 문자들로만 이루어진 일련의 문자열로 바꾸는 인코딩 방식을 가리키는 개념이다.
                 * 영대소문자(52개)
                 * 숫자(10개)
                 * +, /
                 */
                Base64.Encoder encoder = Base64.getEncoder();
                encryptedPassword = encoder.encodeToString(output);
            }
            catch (NoSuchAlgorithmException | UnsupportedEncodingException e)
            {
                throw new RuntimeException(e);
            }
    
            return encryptedPassword;
        }

     

    테스트 용으로 abcd1234!를 입력하면.. 아래와 같이 암호화가 된다.

     

     

    문제점이 발생하는데..

    위의 두 패스워드는 각각 다른 유저들의 패스워드이다. 순서대로 

    유저A

    유저B 

    인데, 아이디만 다를 뿐 패스워드는 같다.

    암호화를 하긴 했는데 어쩐지 좀 허전한거같기도..

    그 때 사용 할 수 있는게 salt다.

     

    위의 코드에서 입력한 패스워드값 외에 사용자 아이디값도 받아서 salt라는 변수에 대입한 후 

    비밀번호를 암호화할 때 사용한다.

    사용자마다 아이디는 다르므로 당연히 유저A와 유저B의 패스워드가 같을 때 암호화 된 결과는 상이함.

     MessageDigest md = MessageDigest.getInstance("SHA-512");
    byte[] input = password.getBytes("UTF-8");
    //소금치기(재료:사용자 아이디)
    byte[] saltInput = salt.getBytes("UTF-8");
    //먹인다.
    md.update(saltInput);
    //소화된 결과물을 확인한다.ㅋ
    byte[] output = md.digest(input);//이진데이터가 나옴

     

    소금 간 한 결과 : 유저A와 유저B의 패스워드가 다르게 바뀜.

     

    +

    변환이 무사히 끝났다면, 비밀번호 관련  log는 주석처리하거나 제거하자.

     

     

    +

    webFilter로 사용자/혹은 특정그룹만 특정 웹페이지에 접근 허용할 수 있도록 필터링 할 수있음

    인증:회원로그인

    인가:회원/관리자

     

     

     

     

    -

    금일 실습과제 힌트

    '공부 > web-server' 카테고리의 다른 글

    1219 WebServer 9일차  (1) 2023.12.19
    1215 WebServer 8일차  (0) 2023.12.15
    1212 WEB SERVER 5일차  (0) 2023.12.12
    1211 WebServer 4일차  (0) 2023.12.11
    1208 WEB SERVER 3일차  (0) 2023.12.08
    댓글