ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [JS, PHP, MYSQL] 로그인, 로그인 우회 - 3.2
    Web - Security/Login 2023. 5. 10. 15:37

    로그인 과정에서 입력값에 대해 검증과정을 추가해 주었다

     

    로그인 페이지 

    이전에 만들어놨던 login_2 데이터베이스와 로그인페이지를 이름만 변경하였다

     

    데이터 베이스 연결 변수명을 login_2에서 login_3으로 바꾼 것을 제외하고 달라진 건 없다

     

    5 ~ 8
    로그인페이지의 입력값을 받아오고 아이디와 비밀번호가 있다면 아래의 과정을 이어가고 없다면 로그인 실패처리한다

    11 ~ 17
    입력받은 아이디와 비밀번호에 대해서 검증과정을 진행한다
    trim()은 문자열의 앞뒤에 있는 모든 공백 문자나 다른 문자들을 제거한다
    stripslashes()는 문자열에서 백슬래시(backslash)를 제거한다
    htmlspecialchars() 함수는 특수 문자를 HTML 엔티티로 변환한다

    19 ~ 27
    사용자 입력을 받은 SQL 질의문에 대해서도 검증하는 단계를 추가해 줬다
    완성된 SQL 질의문에서 SELECT, FROM, WHERE 단어의 개수를 구해주고
    SELECT, FROM, WHERE의 개수가 모두 1개여야만 데이터베이스에 SQL 질의문을 전달하도록 한다

     

    29 ~ 52
    만약 일치하는 회원이 존재한다면 로그인 성공 페이지로 이동하고 존재하지 않는다면 로그인 페이지로 이동하게 한다

     

    입력할 값 : "     test's     " ( 큰따옴표 사이 좌우공백 5칸 , 큰따옴표 제외 )
    
    trim()               // 문자열의 앞뒤에 있는 모든 공백 문자나 다른 문자들을 제거
    
    입력한값 : "test\'s"
    
    
    stripslashes()       // 문자열에서 백슬래시(backslash)를 제거하는데 사용
    
    입력한값 : "test's"
    
    
    htmlspecialchars()   // 함수는 특수 문자를 HTML 엔티티로 변환한다
    
    입력한값 : "test's"
    
    
    변수이름 : "test1, test2, test3, test4"
    
    , 의 개수 : substr_count(변수이름, "개수 세고 싶은 것 여기에")
    3 = substr_count(변수이름, ",");

     

     

     

    로그인 테스트

    로그인과정에는 문제가 없다

     

     

     

    login_3  -  로그인 우회 및 취약점

     

    CASE 1 - 로그인 페이지로 바로 이동

    입력값에 대한 검증만 강화하여 로그인 홈페이지로 바로 넘어가는 경우는 막지 못한다

     

    CASE 2 - Brute Force ( 취약점 )

    이 로그인 페이지에서는 로그인 시도 횟수를 확인하지 않고 있다

    아이디가 normaltic 이고 비밀번호가 1234 이므로 사전대입공격으로 충분히 로그인이 가능하다

     

     

     

    대응방안

     

    CASE 1 - 로그인 페이지로 바로 이동

    로그인에 성공을 해야만 접근이 가능하도록 세션을 이용해 주도록 한다

     

    CASE 2 - Brute Force

     로그인 시도 횟수를 확인하여 Brute Force 공격을 차단하도록 한다

    728x90
Designed by Tistory.