불순한 의도를 가지고 사이트를 공격해오는 사용자로부터 웹사이트를 안전하게 지키는 방법 두 가지를 공부해보겠습니다.
지난 포스트
저 혼자서 공부한 내용을 대충 정리하려고 쓰는 글입니다.
모든 내용은 다 생활코딩 강의를 기반으로 하고 있으니, 어쩌다가 검색으로 들어오신 분들도 제 글들을 보기보다는 유튜브에서 생활코딩의 강의들을 보시는 것을 권장드립니다.
보안 - filtering (mysqli_real_escape_string)
이전에 올렸던 이 포스트의 생활코딩 강의 영상 거의 마지막 부분에 이고잉 님께서 언급했었던 그 문제를 드디어 다루게 됩니다.
사용자가 악의적으로 사이트에 SQL문을 주입시켜서 공격하는 SQL Injection을 방지하는 방법입니다.
수정 전의 코드
$sql = "SELECT * FROM topic WHERE id={$_GET['id']}";
수정 후의 코드
$filtered_id = mysqli_real_escape_string($conn, $_GET['id']);
$sql = "SELECT * FROM topic WHERE id={$filtered_id}";
수정 전의 코드
$sql = "
INSERT INTO topic
(title, description, created)
VALUES(
'{$_POST['title']}',
'{$_POST['description']}',
NOW()
)
";
수정 후의 코드
$filtered = array(
'title'=>mysqli_real_escape_string($conn, $_POST['title']),
'description'=>mysqli_real_escape_string($conn, $_POST['description'])
);
$sql = "
INSERT INTO topic
(title, description, created)
VALUES(
'{$filtered['title']}',
'{$filtered['description']}',
NOW()
)
";
이렇게 $_GET이나 $_POST를 mysqli_real_escape_string( )을 이용해 변수나 Array 안에 넣은 다음에 원래 $_GET이나 $_POST가 있던 자리에 변수명을 넣어줍니다.
보안 - SQL Injection의 원리
SQL Injection의 원리를 설명하는 영상입니다.
보안 - escaping (htmlspecialchars)
이번에는 SQL문이 아닌, 자바스크립트로 하는 공격을 방지하는 방법입니다.
수정 전의 코드
while($row = mysqli_fetch_array($result)) {
$list = $list."<li><a href=\"index.php?id={$row['id']}\">{$row['title']}</a></li>";
}
수정 후의 코드
while($row = mysqli_fetch_array($result)) {
$escaped_title = htmlspecialchars($row['title']);
$list = $list."<li><a href=\"index.php?id={$row['id']}\">{$escaped_title}</a></li>";
}
수정 전의 코드
$article['title'] = $row['title'];
$article['description'] = $row['description'];
수정 후의 코드
$article['title'] = htmlspecialchars($row['title']);
$article['description'] = htmlspecialchars($row['description']);
htmlspecialchars는 사용자가 입력한 내용이 출력되는 곳에 쓰는 함수입니다.
이 함수를 사용한다면, 사용자가 악의적으로 자바스크립트 코드를 심어도 무력화시킬 수 있습니다.
이 글이 도움이 됐다면 하단의 ♡ 공감 버튼을 꾹 눌러서
빨간 하트♥로 만들어주세요.
지인에게 보여주고 싶은 글이었다면
공감 버튼 옆을 클릭해서 SNS에 공유해주세요.
댓글은 블로그 운영에 큰 힘이 됩니다.
'그 외 프로그래밍 언어 > php' 카테고리의 다른 글
php&MariaDB, 게시판 글 삭제 (0) | 2022.08.25 |
---|---|
php&MariaDB, 게시판 글 수정 (0) | 2022.08.24 |
php&MariaDB, 게시판 글 읽기 (0) | 2022.08.23 |
php&MariaDB, 게시판 글 읽기를 위한 준비 (feat. mysqli_fetch_array) (0) | 2022.08.22 |
php&MariaDB, 게시판 글 생성 (0) | 2022.08.21 |
댓글