웹 해킹 & 시큐어 코딩

웹 해킹 & 시큐어 코딩 (14)

홍시뗄레 2025. 1. 21. 15:49

대응 방안

1. 서버 사이드 스크립트 기능 구현

2. 사용자 입력값 형식에 따른 정규 표현식 검증

화이트리스트 방식으로 허용하기

3. 악의적인 문자 검증

4. 기능 제거

 

[실습3-3] 취약 환경 시큐어 코딩 적용 실습

Ping check 페이지 부분이 취약했으니 이에 대한 시큐어 코딩을 적용해보자.

 if(!empty($ip)) {
    $result = shell_exec("ping {$ip}");
    $result = iconv("EUC-KR", "UTF-8", $result);
    $result = str_replace("\n", "<br>", $result);
  }

여기서 if문 안에 있는 첫번째 문장이 shell에서 실행하는 것이므로, 그 앞에서 시큐어 코딩 구문을 추가해주어야 한다.

시스템 명령이 실행되기 전에 막아주자.

if(!empty($ip)) {
    if(!preg_match("/^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$/",$ip)){
        echo "<script>alert('정상적인 입력값이 아닙니다.');history.back(-1);</script>";
        exit();
    }
    $result = shell_exec("ping {$ip}");
    $result = iconv("EUC-KR", "UTF-8", $result);
    $result = str_replace("\n", "<br>", $result);
  }

원하는 입력값만 받도록 함수를 설정해주고, (화이트리스트 방식)

그 외의 입력값을 입력받으면 에러 메시지가 출력되도록 코드를 짜주면 된다.

 

확인해보면 잘 작동되는 것이 보인다. 

IP 주소의 형식이 맞지 않으면 경고창이 뜬다.