02.common.php
매 페이지에서 호출되는 페이지로 공통적인 PHP코드가 들어있습니다.
기본적인 보안설정이나, DB연결, 세션설정등이 들어가 있습니다.
기본 세팅
<?php require_once "function.php"; date_default_timezone_set('Asia/Seoul'); header("Content-type: text/html; charset=utf-8"); header("P3P : CP=\"ALL CURa ADMa DEVa TAIa OUR BUS IND PHY ONL UNI PUR FIN COM NAV INT DEM CNT STA POL HEA PRE LOC OTC\"");
가장 윗부분에 함수들이 들어있는 function.php 파일을 불러옵니다.
date_default_timezone_set 을 이용하여 Asia/Seoul timezone을 사용함을 명시해줍니다.
header 명령어를 이용하여 문자셋과 쿠키등의 설정을 명시해줍니다.
보안을 위한 서버변수 처리
$ext_arr = array ( 'PHP_SELF', '_ENV', '_GET', '_POST', '_FILES', '_SERVER', '_COOKIE', '_SESSION', '_REQUEST', 'HTTP_ENV_VARS', 'HTTP_GET_VARS', 'HTTP_POST_VARS', 'HTTP_POST_FILES', 'HTTP_SERVER_VARS', 'HTTP_COOKIE_VARS', 'HTTP_SESSION_VARS', 'GLOBALS'); $ext_cnt = count($ext_arr); for ($i=0; $i<$ext_cnt; $i++) { if ( isset($_GET[$ext_arr[$i]]) ) unset($_GET[$ext_arr[$i]]); if ( isset($_POST[$ext_arr[$i]]) ) unset($_POST[$ext_arr[$i]]); } // SQL Injection 등으로 부터 보호를 위해 sql_escape_string() 적용 if (get_magic_quotes_gpc()) { // 서버 기본설정에 addslash 가 되어있는경우가 있으므로, // 설정이 되어 있는 경우 stripslashes 를 이용하여 해제해준다. $_POST = array_map_deep('stripslashes', $_POST); $_GET = array_map_deep('stripslashes', $_GET); $_COOKIE = array_map_deep('stripslashes', $_COOKIE); $_REQUEST = array_map_deep('stripslashes', $_REQUEST); } // sql_escape_string 적용 $_POST = array_map_deep('sql_escape_string', $_POST); $_GET = array_map_deep('sql_escape_string', $_GET); $_COOKIE = array_map_deep('sql_escape_string', $_COOKIE); $_REQUEST = array_map_deep('sql_escape_string', $_REQUEST);
간단한 보안을 위한 코드입니다.
서버변수를 보안처리 해주는 코드이며 그누보드에서 참조하였습니다.
$_POST, $_GET, $_COOKIE, $_REQUEST 의 경우 SQL 인젝션 보호를 위해 적용한 코드입니다.
경로및 URL 구해오기
$base_url = (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') ? 'https://' : 'http://'; $base_url .= ($_SERVER['SERVER_PORT'] != '80') ? $_SERVER['HTTP_HOST'].':'.$_SERVER['SERVER_PORT'] : $_SERVER['HTTP_HOST']; define('BASEPATH', str_replace(basename(__FILE__), "", realpath(__FILE__))); // 루트 디렉토리 define('BASEURL', $base_url); define('SESSION_PATH', BASEPATH."session");
common.php 파일을 이용하여 루트 디렉토리의 서버상의 절대경로와 URL을 구해옵니다.
이는 상수로 선언하여 사용하도록 합니다.
세션설정
ini_set("session.use_trans_sid", 0); // PHPSESSID를 자동으로 넘기지 않음 ini_set("url_rewriter.tags",""); // 링크에 PHPSESSID가 따라다니는것을 무력화함 session_save_path(SESSION_PATH); session_cache_limiter("no-cache, must-revalidate"); ini_set("session.cache_expire", 180); ini_set("session.gc_maxlifetime", 10800); ini_set("session.gc_probability", 1); ini_set("session.gc_divisor", 100); session_set_cookie_params(0, '/'); ini_set("session.cookie_domain",'.test.com'); // 쿠키 도메인 설정 session_start(); if(! is_dir(SESSION_PATH) ) { mkdir(SESSION_PATH,0777); chmod(SESSION_PATH, 0777); }
세션에 관한 설정이며, 쿠키도메인 설정부분에 도메인을 입력하도록 합니다.
데이터베이스 연결
$dbcon = mysqli_connect("호스트주소", "아이디", "비밀번호", "DB이름") OR die ("Failed to connect to MySQL: " . mysqli_connect_error()); $dbcon->set_charset("utf8");
데이터베이스 연결 객체를 생성합니다.
관리자 비밀번호 선언
define("ADMIN_PASSWORD", "비밀번호");
이번 시리즈에서는 로그인 기능을 구현하지 않을 예정이기에,
댓글입력및 다른사람이 입력한 비밀글 보기 등을 위해사용할 관리자 비밀번호를 정의합니다.
완성된 코드
<?php require_once "function.php"; date_default_timezone_set('Asia/Seoul'); header("Content-type: text/html; charset=utf-8"); header("P3P : CP=\"ALL CURa ADMa DEVa TAIa OUR BUS IND PHY ONL UNI PUR FIN COM NAV INT DEM CNT STA POL HEA PRE LOC OTC\""); /**************************** * * 보안을 위한 서버 변수 처리 * ****************************/ $ext_arr = array ( 'PHP_SELF', '_ENV', '_GET', '_POST', '_FILES', '_SERVER', '_COOKIE', '_SESSION', '_REQUEST', 'HTTP_ENV_VARS', 'HTTP_GET_VARS', 'HTTP_POST_VARS', 'HTTP_POST_FILES', 'HTTP_SERVER_VARS', 'HTTP_COOKIE_VARS', 'HTTP_SESSION_VARS', 'GLOBALS'); $ext_cnt = count($ext_arr); for ($i=0; $i<$ext_cnt; $i++) { if ( isset($_GET[$ext_arr[$i]]) ) unset($_GET[$ext_arr[$i]]); if ( isset($_POST[$ext_arr[$i]]) ) unset($_POST[$ext_arr[$i]]); } // SQL Injection 등으로 부터 보호를 위해 sql_escape_string() 적용 if (get_magic_quotes_gpc()) { // 서버 기본설정에 addslash 가 되어있는경우가 있으므로, // 설정이 되어 있는 경우 stripslashes 를 이용하여 해제해준다. $_POST = array_map_deep('stripslashes', $_POST); $_GET = array_map_deep('stripslashes', $_GET); $_COOKIE = array_map_deep('stripslashes', $_COOKIE); $_REQUEST = array_map_deep('stripslashes', $_REQUEST); } // sql_escape_string 적용 $_POST = array_map_deep('sql_escape_string', $_POST); $_GET = array_map_deep('sql_escape_string', $_GET); $_COOKIE = array_map_deep('sql_escape_string', $_COOKIE); $_REQUEST = array_map_deep('sql_escape_string', $_REQUEST); /**************************** * * 현재 경로 및 URL 구해오기 * *****************************/ $base_url = (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') ? 'https://' : 'http://'; $base_url .= ($_SERVER['SERVER_PORT'] != '80') ? $_SERVER['HTTP_HOST'].':'.$_SERVER['SERVER_PORT'] : $_SERVER['HTTP_HOST']; define('BASEPATH', str_replace(basename(__FILE__), "", realpath(__FILE__))); // 루트 디렉토리 define('BASEURL', $base_url); define('SESSION_PATH', BASEPATH."session"); /***************************** * * 세션 설정 * *****************************/ ini_set("session.use_trans_sid", 0); // PHPSESSID를 자동으로 넘기지 않음 ini_set("url_rewriter.tags",""); // 링크에 PHPSESSID가 따라다니는것을 무력화함 session_save_path(SESSION_PATH); session_cache_limiter("no-cache, must-revalidate"); ini_set("session.cache_expire", 180); ini_set("session.gc_maxlifetime", 10800); ini_set("session.gc_probability", 1); ini_set("session.gc_divisor", 100); session_set_cookie_params(0, '/'); //ini_set("session.cookie_domain", COOKIE_DOMAIN); // 쿠키 도메인 설정 session_start(); if(! is_dir(SESSION_PATH) ) { mkdir(SESSION_PATH,0777); chmod(SESSION_PATH, 0777); } /****************************** * * 데이타 베이스 설정 * ******************************/ $dbcon = mysqli_connect("호스트주소", "아이디", "비밀번호", "DB이름") OR die ("Failed to connect to MySQL: " . mysqli_connect_error()); $dbcon->set_charset("utf8"); /****************************** * * 관리자용 비밀번호 * ******************************/ define("ADMIN_PASSWORD", "비밀번호");
[catlist id=76 numberposts=14 conditional_title=”PHP 질문과 답변 게시판 만들기” orderby=date]