
안녕하십니까 코딩 파인애플입니다
이번 첫 글은 SQL INJECTION에 관해 알아보겠습니다.
SQL Injection (SQL을 주입하다) 는 해커가 웹사이트의 입력창에 SQL 명령어를 주입하여 웹사이트 뒤에 있는 데이터베이스(DB)를 조작하는 대표적인 웹 해킹 기법을 말합니다.
만일 sqli 공격이 성공하였을 경우 인증 우회, 개인정보 조회, 데이터 수정 및 삭제 등 심각한 피해가 발생할 수 있습니다
예를 들어 뭐 이딴 코드가 있다 칩시다.
<?php
$userId = $_POST['id'];
$userPw = $_POST['pw'];
$query = "SELECT * FROM users WHERE username = '" . $userId . "' AND password = '" . $userPw . "'";
$result = mysqli_query($conn, $query);
if (mysqli_num_rows($result) > 0) {
echo "로그인 성공!";
} else {
echo "로그인 실패...";
}
?>
이런 코드의 경우 순수하다 못해 백치미 넘치는 개발자는 당연 사용자가 유저이름이나 비번을 넣겠다고 생각하겠지만 세상은 그리 쉽지 않습니다.

$query = "SELECT * FROM users WHERE username = '" . $userId . "' AND password = '" . $userPw . "'";
만일 사용자가 정상적인 형태의 입력값을 코드에 넣었다면
sql 문은 다음과 같은 형태가 됩니다
SELECT * FROM users
WHERE username = 'apple'
AND password = '1234';
하지만 위에서도 말했다시피 세상은 그리 쉽지 않습니다 인젝션을 하기 위해
코드에서 따음표를 미리 저희가 선수를 치는 겁니다.
' or 1--을 비번이나 아이디에 입력하게 된다면 작은 따음표로 입력된 곳이 코드에 의도된 바와 다르게 사용자에 의해 미리 닫히게 됩니다
그 뒤 or 1을 통해 어떠한 조건에도 참이 되게 값을 설정하여 로그인을 우회하게 만듭니다
마지막 화룡점정으로 -- 을 이용해 그 뒤에 나오는 sql문들을 전부 주석으로 처리합니다. (MySql의 경우 '#'가 주석)
그렇게 저희는 하나의 웹사이트를 쉽게 따잇! 하게 된 겁니다.
