안녕하세요 제가 개발과제 2주 차 2번까지
즉 로그인 페이지까지 만들었습니다.
그런데 코딩 하면서 보안상 문제가 있더라고요!
그래서 그 보안을 지키기 위해 점차 고쳐 나가겠습니다.
아마 지금은 1이고 다음에 만들면서 보안 문제가 보일 때마다 추가하겠습니다
되도록이면 만들면서 보안 지키겠습니다!
.
.
.
시작하죠
우선 sql injection의 공격을 피하기 위해
mysqli_real_escape_string() 적용시키겠습니다!
sql injection은 간단히 말해 저희가 sql문을 작성해 보내는데 평범한 'rerange' 같은 문자가 아닌
DROP TABLE 이렇게 sql 문을 적어서 제 데이터베이스에 악영향을 끼치게 하는 공격입니다.
https://www.youtube.com/watch?v=Xgb4LhqX4PU&list=PLuHgQVnccGMA5836CvWfieEQy0T0ov6Jh&index=17
참고는 여기서 했습니다
ID에 '; DELECT FROM LOGIN_INFO WHERE id = 'rerange2'; --
이렇게 작성해 보겠습니다.
그럼
$sql = "SELECT * FROM LOGIN_INFO WHERE id='$login_id' AND pw = '$login_pw'"; 이 명령어 들어갈 때
$sql = "SELECT * FROM LOGIN_INFO WHERE id=' '; DELECT FROM LOGIN_INFO WHERE id = 'rerange2'; --AND pw = '$login_pw'";
이렇게 실행하게 됩니다 --는 뒤에 있는 명령어 주석 처리하는 것이죠!
이렇게 되면 id 찾고 난 뒤에 id가 rerange2인 것을 삭제하게 되는 것이죠..
물론.. 이런 공격자에게 제 데이터베이스 이름과 테이블 이름, 필드명( id )을 알려 주면 안 됩니다!
그냥 이 예시는 이런 공격이 가능하다는 것만 보면 될 거 같습니다!
.
.
.
phpmyadmin은 이런 sql injection 공격에 보호 모드가 켜져 있어서 자동으로 보호가 됩니다.
그래도 완벽하게 보호는 못합니다! 그래서 mysqli_real_escape_string()을 추가하겠습니다
저희가 sql문을 처리하는 php문으로 가겠습니다.
process_login.php에 $login_id = $_POST['id']하고 $login_pw = $_POST['pw'] 보이 실 겁니다.
이걸 고치겠습니다
mysqli_real_escape_string() 함수는 '' 나 "" 이거나 ; 이러한 것을 문자 치급하게 하는 것입니다!
간단하게 sql문을 악용으로 넣고 실행하지 못하게 막습니다.
문법은 mysqli_real_escape_string([데이터베이스 연결],[데이터]); 입니다.
//POST로 전달된 정보 받기
$login_id = mysqli_real_escape_string($conn,$_POST['id']);
$login_pw = mysqli_real_escape_string($conn,$_POST['pw']);
이러면 이제 id와 pw에 sql 문법으로 장난쳐도 상관없게 됩니다!
.
.
.
그리고 세션 ID를 로그인할 때마다 새로운 ID로 발행되게 하겠습니다!
이는 세션 하이재킹 공격을 방지하기 위함입니다.
간단하게 설명드리자면 해커가 쿠키에 저장된 세션 ID를 탈취한 후 해당 ID로 사용자의 세션을 탈취가 가능합니다.
그러니 ID를 자동으로 갱신되게 이를 방지하겠습니다.
함수는 session_regenerate_id() 사용하겠습니다.
로그인 할때마다 자동으로 갱신되게 하겠습니다.
//쿼리 실행 결과 확인
if(mysqli_num_rows($result) > 0 ) {
//로그인 성공
session_regenerate_id(); //ID 자동 갱신
$row = mysqli_fetch_array($result);
$_SESSION['login_id'] = $row['id'];
header("Location: only_login.php");
}
됐습니다. 한 번 혹시 모르니 잘되는지 안되는지 실행해보고 마치겠습니다
잘 되네요! 이렇게 일단 보안 코딩 마치도록 하겠습니다!
되도록이면 만들면서 보안 문제를 해결하겠으나
만약 놓친 게 있으면 이렇게 추가로 포스팅하겠습니다
'개발과제 > 보안추가' 카테고리의 다른 글
[노말틱 모의 해킹 취업반 추가 개발과제 ] XSS 방지 (0) | 2023.05.13 |
---|---|
[노말틱 모의 해킹 취업반 추가 개발과제 ] PreparedStatement 적용하기 -2 (0) | 2023.05.03 |
[노말틱 모의 해킹 취업반 추가 개발과제 ] PreparedStatement 적용하기 -1 (0) | 2023.05.02 |
[노말틱 모의 해킹 취업반 개발과제 (3)] 보안 관련해서 보완 하기 (0) | 2023.04.23 |
[노말틱 모의 해킹 취업반 개발과제 (2)] 보안 관련해서 보완 하기 (2) | 2023.04.20 |