[PHP] PHP 5.6 - 시큐어 코딩하기(SQL Injection)
실제 작성한 코드를 통해서 소개한다.
외부의 사용자가 스크립트 언어를 삽입하여 SQL 문장으로 공격하는 문제 등이 존재할 수 있다.
이를 막는 방법에 대해서 소개한다.
(선택) mysqlnd 5.0.11-dev - 20120503
1. SQL 문장 변형이 일어나기 쉬운 코드
$query = 'SELECT password FROM board_' . $boardName . '_comment ' .
'where id = \'' . $comment->getID() . '\' ' .
'and password = \'' . $password . '\'';
*/ // SQL Injection 미점검
그림 1-1. 문자열로 생성하는 SQL 문장
이런 코드로 프로그래밍을 작성하면 다음과 같은 일들이 생길 수 있다.
그림 1-2. SQL 문장으로 공격하기
예를 들어서 화면을 아래처럼 꾸몄다고 가정하자.
번호 |
{id} |
|
글 제목 |
{subject} |
|
조회수 |
{count} |
|
|
|
|
|
|
|
그림 1-3. UI - View.php
예를 들면, 그림 1-3에서 {id}의 내용에 불법적인 스크립트 등을 삽입하여 공격할 수가 있다.
이러한 것을 예방하려면, 아래의 코드처럼 개선하면 좋을 것으로 보인다.
mysql_query("set session character_set_connection=utf8;");
/*
// DB Article |
그림 1-4. 개선된 코드(SQL Injection) |
2. 참고자료(Reference)
1. SQL Injection, PHP.NET, http://php.net/manual/en/security.database.sql-injection.php, Accessed by 2018-07-31
'소프트웨어(SW) > PHP' 카테고리의 다른 글
[PHP] XSS 소개, 구현 (6) | 2018.08.04 |
---|---|
[PHP] PHP 5.6 - xFrame 공격 방지하기(Clickjacking 피하기) (5) | 2018.07.31 |
[PHP/GPLv3] Feng Office 2.32Rc1 한글화 - 그룹웨어 오픈소스 (6) | 2013.09.18 |
[PHP/GPLv2] PHP SysInfo 프로젝트 - Sysinfo (10) | 2009.07.31 |
[PHP/GPLv2] PHP 시스템 정보 확인(sysinfo) - 수정(PHP 5.2 지원) (11) | 2009.07.30 |