블로그 프로필 이미지




 일반적으로 웹싸이트를 제작한뒤 운영할때 간혹 오류표시 기능을 끄지 않아, PHP 오류들이 그대로 노출되는 경우가 많다. 오류표시 노출의 경우, 웹서버의 경로나, 공개되어선 안되는 PHP 관련 변수들이 노출되어, 해커같은 악성사용자들의 좋은 먹잇감이 되기도 한다. 물론, URL로 특정 경로접근이 막아져 있는 경우는 경로에 대해 크게 걱정할 필요는 없겠지만, DB 오류와 관련된 부분들은 상당히 위험할 수 있다. 또한 웹싸이트의 오류를 일반 사용자들이 본다면, 그다지 좋아하지는 않을것이다. 


 이와 같이 오류에 대한 설정은 웹싸이트 운영을 할 시 상당히 중요하다. CI 에서는 index.php 파일에서 오류표시 기능을 설정할 수 있다. 물론, 일반적으로 ini_set() 함수 또는 php.ini 설정파일에서 에러표시 기능을 설정할 수도 있겠지만, 이곳에서는 CI에서 에로표시 기능을 설정하는 방법을 설명하기 때문에, CI를 기준으로 살펴보도록 하자.



☞ CI 에서 오류 표시 설정


 위에서도 말했다시피 CI 에서는 index.php 파일의 설정을 통해 PHP의 오류표시에 대해 설정할 수 있다. 우선 index.php을 열어서 살펴보면 아래와 같은 구문을 볼 수 있을것이다.


define('ENVIRONMENT', isset($_SERVER['CI_ENV']) ? $_SERVER['CI_ENV'] : 'development');


 위의 구문이 바로 CI에서 오류표시기능에 대한 설정을 하는 부분이다. 현재의 설정값은 development 로 설정이 되어있다. development 값은 개발자 모드로 이값을 설정시 오류를 표시하게 된다. 일반적으로 웹싸이트를 제작하는 동안은 development 값을 사용하게 된다. 하지만 웹싸이트를 운영할 시, PHP 오류표시로 인한 경로노출은 보안의 취약점중 하나가 될 수 있기 때문에, 웹싸이트를 운영할 시 에는 에러가 표시되지 않도록 production 값을 설정해 주는게 좋다. 이러한 값들의 자세한 설명은 아래에서 살펴보도록 하자. 아래는 CI에서 오류표시에 대한 설정값들의 설명이다.


development : 이 값은 개발모드로 브라우저에 PHP 오류를 표시할 때 사용한다.

production : 이 값은 운영모드로 브라우저에 PHP 오류를 표시하지 않을 때 사용한다.

testing : 이 값을 설정하면 브라우저에 PHP 오류를 표시하지 않는다. 결론적으로 production 모드와 같다


 이처럼 CI에서 PHP 오류표시 대한 설정방법은 간단하다. 굳이 긴 설명을 하지 않아도 이러한 설정법들은 익숙하기 때문에, CI를 처음 접하는 경우에도 쉽게 이해 할 수 있을것이다. 하지만, CI 같은 경우 위의 설정값말고도 오류표시에 대한 설정을 해주어야 하는 부분이 있다. 그건 바로 DATABASE 에대한 오류표시 설정이다. DB 같은경우 중요한 정보들이 담겨 있기때문에, DB에대한 오류표시기능이 켜져 있을 시 오류가 발생한다면, 데이터베이스의 중요한 정보들을 노출 시켜 보안의 큰 취약점이 될 수 있다.


 일반적으로 DATABASE 에대한 오류표시설정은 CI에서 DB 환경설정 파일인 database.php 에서 설정할 수 있다. CI의 기본경로 본다면 아래의 경로와 같다.


application/config/database.php


 위의 경로를 통해 database.php 파일을 살펴보면 db에 대한 여러 설정들을 볼 수 있을것이다. 그중에서 오류표시에 대한 설정은 아래의 그림에서 붉은색으로 표시된 db_debug 값을 이용하여 할 수 있다. 이값이 TRUE 라면 DB에 대한 오류를 화면에 표시하게 되고, FALSE 라면 DB에 대한 오류를 화면에 표시하지 않게 된다.  



(database.php 의 설정파일 내용중..)



 CI를 이용하여 웹싸이트를 제작할 시 많이 하는 실수중 하나가 바로 DB 오류표시기능을 켜놓은 상태에서 운영을 하는것이다. 이러한 실수는 앞서말했다시피 보안의 큰 취약점이 될 수 있다. 아무리 PHP 오류표시를 Off 시켰다해도, CI 에서는 db_debug라는 설정값이 TURE 일경우 자체적으로 DB의 쿼리문들을 디버깅하여 오류를 보여주도록 설계었기 때문에,  웹싸이트를 운영할 시에는 항상 이값은 FALSE 로 해놓아야한다.


 웹싸이트를 제작할 시 디자인과 기능도 중요하지만, 이러한 디자인과 기능보다도 더 중요한건 바로 보안이다. 웹싸이트를 보안하는건 정말 어렵게 다가올 수 있으나, 단순하게 생각해보면 그렇게 어려운일만은 아니다. 여기서 단순하게 생각한다는 말은 쉽게 말해 어려운 보안만을 생각하는게 아니라, 쉬운 보안방법부터 생각한다는 것이다. 한가지 방법을 예로들면 오늘 설명한 CI의 오류표시 설정을 예로 들 수 있다. 그 이유는 말않해도 알겟지만, 오류표시 노출은 해커에게 정보를 넘겨주는 행위로 볼 수 있기 때문이다.


 이야기가 길어지면 왠지 주제가 보안쪽으로 흘러갈거 같아서 여기서 끝내도록 하겠다.


댓글
newbiedev 2015.07.24 16:08 신고  Edit  Rep

감사합니다 덕분에 CI 많이 알아갑니다!

Favicon of http://b.redinfo.co.kr Dreamload 2015.07.27 19:23 신고  Edit

도움이 되셧다니 정말 다행입니다~
아직 많이 부족한 실력의 글을 읽어주셔서 감사합니다^^

(비회원은 자신의 글을 볼 수 없습니다.)