그누보드 최신버전 (5.1.0) 살펴보기 - common.php (6)
common.php 그누보드에서 가장 기본이 되는 파일이라고 볼수 있습니다.
모든 파일에 기본적으로 인클루드 되어서 사용됩니다.
에러출력 설정, 보안적인 처리, 기본적인 경로 설정, 디비연결, 세션 설정및 시작, 공용변수의 초기화 및 재설정, 기타 확장 등의 내용으로 이루어져 있습니다.
$config = sql_fetch(" select * from {$g5['config_table']} ");
기본적인 운영 전반의 설정값들을 가져와서 $config 에 배열로 저장
환경설정을 확장하고 디비를 사용하지 않을때도 호출 할수 있는 경우도 있다고 생각한다면,
환경설정 자체를 파일로 저장하는것이 더 좋습니다.
관리자 환경설정 수정처리 부분에서 디비에 저장하지 않고 serialize 로 저장하는 것이 보편적입니다.
만약 그렇게 했을때, common.php 에서는 디비 접속 이전에 환경 설정을 unserialize 로 받아와서 사용할수 있습니다.
define('G5_HTTP_BBS_URL', https_url(G5_BBS_DIR, false));
define('G5_HTTPS_BBS_URL', https_url(G5_BBS_DIR, true));
게시판의 기본 주소를 http 부터 시작하는 url 로 변환하여 상수에 저장합니다.
common.lib.php 에 정의되어있는 https_url 함수를 사용하였으며,
config.php 에서 정의되어있는 G5_HTTPS_DOMAIN, G5_DOMAIN, G5_URL 상수가 사용되어집니다.
if ($config['cf_editor'])
define('G5_EDITOR_LIB', G5_EDITOR_PATH."/{$config['cf_editor']}/editor.lib.php");
else
define('G5_EDITOR_LIB', G5_LIB_PATH."/editor.lib.php");
그누보드 내에서 사용되어질 기본 에디터 라이브러리를 정의합니다.
환경설정에서 설정한 에디터명으로 결정되어집니다.
if (isset($_REQUEST['PHPSESSID']) && $_REQUEST['PHPSESSID'] != session_id())
goto_url(G5_BBS_URL.'/logout.php');
이 부분은 상위의
@ini_set("session.use_trans_sid", 0);
@ini_set("url_rewriter.tags","");
이 부분 때문에 굳이 필요없는 내용입니다.
꼭 해야 한다면 악의적인 사용자 차단의 목적으로
$phpsessid_name = session_name();
if (isset($_REQUEST[$phpsessid_name]))
goto_url(G5_BBS_URL.'/logout.php');
이런 식으로 그 방식 자체를 원천 차단하는게 보안상 더 좋다고 보입니다.
$qstr = '';
if (isset($_REQUEST['sca'])) {
$sca = clean_xss_tags(trim($_REQUEST['sca']));
if ($sca)
$qstr .= '&sca=' . urlencode($sca);
} else {
$sca = '';
}
if (isset($_REQUEST['sfl'])) {
$sfl = trim($_REQUEST['sfl']);
$sfl = preg_replace("/[\<\>\'\"\\\'\\\"\%\=\(\)\s]/", "", $sfl);
if ($sfl)
$qstr .= '&sfl=' . urlencode($sfl); // search field (검색 필드)
} else {
$sfl = '';
}
if (isset($_REQUEST['stx'])) { // search text (검색어)
$stx = get_search_string(trim($_REQUEST['stx']));
if ($stx)
$qstr .= '&stx=' . urlencode(cut_str($stx, 20, ''));
} else {
$stx = '';
}
if (isset($_REQUEST['sst'])) {
$sst = trim($_REQUEST['sst']);
$sst = preg_replace("/[\<\>\'\"\\\'\\\"\%\=\(\)\s]/", "", $sst);
if ($sst)
$qstr .= '&sst=' . urlencode($sst); // search sort (검색 정렬 필드)
} else {
$sst = '';
}
if (isset($_REQUEST['sod'])) { // search order (검색 오름, 내림차순)
$sod = preg_match("/^(asc|desc)$/i", $sod) ? $sod : '';
if ($sod)
$qstr .= '&sod=' . urlencode($sod);
} else {
$sod = '';
}
if (isset($_REQUEST['sop'])) { // search operator (검색 or, and 오퍼레이터)
$sop = preg_match("/^(or|and)$/i", $sop) ? $sop : '';
if ($sop)
$qstr .= '&sop=' . urlencode($sop);
} else {
$sop = '';
}
if (isset($_REQUEST['spt'])) { // search part (검색 파트[구간])
$spt = (int)$spt;
if ($spt)
$qstr .= '&spt=' . urlencode($spt);
} else {
$spt = '';
}
if (isset($_REQUEST['page'])) { // 리스트 페이지
$page = (int)$_REQUEST['page'];
if ($page)
$qstr .= '&page=' . urlencode($page);
} else {
$page = '';
}
이부분은 기본적으로 사용될 query string 을 만드는 부분입니다.
제 개인적으로는 query string 은 원형 그대로를 넘기는 게 가장 좋다고 봅니다.
$qstr .= '&sca=' . urlencode($_REQUEST['sca']);
이런식으로 말입니다.
$qstr = '';
$qstr_keys = Array('sca', 'sfl', 'stx', 'sst', 'sod', 'sop', 'spt', 'page');
foreach($qstr_keys as $v){
if (isset($$v))
unset($$v);
if (isset($_REQUEST[$v]) && strlen((string)$_REQUEST[$v]) > 0) {
if ($v == 'spt' || $v == 'page') //숫자형
$$v = (int)$_REQUEST[$v];
else if ($v == 'sod')
$$v = preg_match("/^(asc|desc)$/i", $_REQUEST[$v]) ? $_REQUEST[$v] : '';
else if ($v == 'sop')
$$v = preg_match("/^(and|or)$/i", $_REQUEST[$v]) ? $_REQUEST[$v] : '';
else if ($v == 'sst') //허용 문자 -> `, 영어대소문자, 숫자, _, 공백, ',', |, ., -
$$v = preg_match("/^(`\w\s,|\.\-]+)$/i", $_REQUEST[$v]) ? $_REQUEST[$v] : '';
else if ($v == 'sfl' || $v == 'sca') //허용 문자 -> `, 영어대소문자, 숫자, _, -, .
$$v = preg_match("/^(`\w\.\-]+)$/i", $_REQUEST[$v]) ? $_REQUEST[$v] : '';
else if ($v == 'stx')
$$v = get_search_string(trim($_REQUEST[$v]);
$qstr .= '&' . $v . '=' . urlencode($_REQUEST[$v]);
}
}
이런식으로 제안 할 수도 있을것 같습니다.
if (isset($_REQUEST['w'])) {
$w = substr($w, 0, 2);
} else {
$w = '';
}
if (isset($_REQUEST['wr_id'])) {
$wr_id = (int)$_REQUEST['wr_id'];
} else {
$wr_id = 0;
}
if (isset($_REQUEST['bo_table'])) {
$bo_table = preg_replace('/[^a-z0-9_]/i', '', trim($_REQUEST['bo_table']));
$bo_table = substr($bo_table, 0, 20);
} else {
$bo_table = '';
}
// URL ENCODING
if (isset($_REQUEST['url'])) {
$url = strip_tags(trim($_REQUEST['url']));
$urlencode = urlencode($url);
} else {
$url = '';
$urlencode = urlencode($_SERVER['REQUEST_URI']);
if (G5_DOMAIN) {
$p = parse_url(G5_DOMAIN);
$urlencode = G5_DOMAIN.urldecode(preg_replace("/^".urlencode($p['path'])."/", "", $urlencode));
}
}
if (isset($_REQUEST['gr_id'])) {
if (!is_array($_REQUEST['gr_id'])) {
$gr_id = preg_replace('/[^a-z0-9_]/i', '', trim($_REQUEST['gr_id']));
}
} else {
$gr_id = '';
}
$qstr 생성할 때와 마찬가지로 변수를 초기화 하고 검사하고 재정의 하는 과정입니다.
댓글 4개
드렸던 댓글을 원형 그대로 유지시키지 못하고 수정해야 했습니다.
한번 제대로 읽고 나서 무슨 말씀인지 바로 알아 먹었습니다. ㅠ
어제는 다른 것을 보았던 것 같아서요. ㅡㅡ 흐미.. 죄송..
그냥 보입니다. ㅠㅠ 감사합니다!
무슨 내용이엇는지 못봣습니다.
게시판 목록
프로그램
| 번호 | 제목 | 글쓴이 | 날짜 | 조회 |
|---|---|---|---|---|
| 7530 | 10년 전 | 780 | ||
| 7529 |
파랑새1597
|
10년 전 | 1198 | |
| 7528 |
파랑새1597
|
10년 전 | 1304 | |
| 7527 |
integrity7
|
10년 전 | 1381 | |
| 7526 | 10년 전 | 2402 | ||
| 7525 |
다빈치코드777
|
10년 전 | 1096 | |
| 7524 | 10년 전 | 1558 | ||
| 7523 | 10년 전 | 954 | ||
| 7522 |
|
10년 전 | 985 | |
| 7521 |
blackkil
|
10년 전 | 1860 | |
| 7520 | 10년 전 | 1279 | ||
| 7519 |
Gaumi
|
10년 전 | 1073 | |
| 7518 | 10년 전 | 1474 | ||
| 7517 | 10년 전 | 818 | ||
| 7516 | 10년 전 | 1279 | ||
| 7515 | 10년 전 | 1393 | ||
| 7514 |
|
10년 전 | 4483 | |
| 7513 |
멋진남자임
|
10년 전 | 1133 | |
| 7512 |
다빈치코드777
|
10년 전 | 864 | |
| 7511 |
|
10년 전 | 3385 | |
| 7510 | 10년 전 | 1359 | ||
| 7509 | 10년 전 | 1134 | ||
| 7508 | 10년 전 | 711 | ||
| 7507 |
senseme
|
10년 전 | 735 | |
| 7506 |
멋진남자임
|
10년 전 | 1627 | |
| 7505 | 10년 전 | 3989 | ||
| 7504 | 10년 전 | 2139 | ||
| 7503 | 10년 전 | 988 | ||
| 7502 | 10년 전 | 514 | ||
| 7501 | 10년 전 | 1435 | ||
| 7500 | 10년 전 | 1483 | ||
| 7499 | 10년 전 | 3376 | ||
| 7498 | 10년 전 | 1196 | ||
| 7497 |
dethos79
|
10년 전 | 2958 | |
| 7496 | 10년 전 | 2141 | ||
| 7495 | 10년 전 | 851 | ||
| 7494 |
CHAVO
|
10년 전 | 1121 | |
| 7493 | 10년 전 | 2644 | ||
| 7492 | 10년 전 | 1255 | ||
| 7491 | 10년 전 | 1461 | ||
| 7490 | 10년 전 | 2326 | ||
| 7489 | 10년 전 | 2117 | ||
| 7488 |
toptopon
|
10년 전 | 887 | |
| 7487 |
|
10년 전 | 1025 | |
| 7486 | 10년 전 | 3345 | ||
| 7485 | 10년 전 | 1307 | ||
| 7484 | 10년 전 | 1364 | ||
| 7483 | 10년 전 | 1018 | ||
| 7482 | 10년 전 | 646 | ||
| 7481 | 10년 전 | 854 | ||
| 7480 | 10년 전 | 1218 | ||
| 7479 | 10년 전 | 2596 | ||
| 7478 | 10년 전 | 1158 | ||
| 7477 |
멋진남자임
|
10년 전 | 1507 | |
| 7476 |
zeppeto
|
10년 전 | 1139 | |
| 7475 |
200점아빠
|
10년 전 | 908 | |
| 7474 | 10년 전 | 4001 | ||
| 7473 | 10년 전 | 985 | ||
| 7472 |
나르시스1
|
10년 전 | 1235 | |
| 7471 | 10년 전 | 869 | ||
| 7470 | 10년 전 | 1270 | ||
| 7469 |
플라이SINJI
|
10년 전 | 961 | |
| 7468 |
|
10년 전 | 538 | |
| 7467 |
|
10년 전 | 648 | |
| 7466 | 10년 전 | 1109 | ||
| 7465 | 10년 전 | 1177 | ||
| 7464 |
|
10년 전 | 1180 | |
| 7463 | 10년 전 | 1237 | ||
| 7462 |
진짜별사탕
|
10년 전 | 849 | |
| 7461 | 10년 전 | 937 | ||
| 7460 | 10년 전 | 3720 | ||
| 7459 |
멋진남자임
|
10년 전 | 1548 | |
| 7458 |
멋진남자임
|
10년 전 | 477 | |
| 7457 | 10년 전 | 912 | ||
| 7456 | 10년 전 | 754 | ||
| 7455 | 10년 전 | 2145 | ||
| 7454 | 10년 전 | 627 | ||
| 7453 | 10년 전 | 818 | ||
| 7452 |
중국어사이트제작
|
10년 전 | 502 | |
| 7451 | 10년 전 | 900 | ||
| 7450 | 10년 전 | 624 | ||
| 7449 |
울라라라우
|
10년 전 | 944 | |
| 7448 | 10년 전 | 1627 | ||
| 7447 |
멋진남자임
|
10년 전 | 495 | |
| 7446 | 10년 전 | 544 | ||
| 7445 |
네이비칼라
|
10년 전 | 1665 | |
| 7444 |
senseme
|
10년 전 | 1397 | |
| 7443 | 10년 전 | 1333 | ||
| 7442 | 10년 전 | 722 | ||
| 7441 |
멋진남자임
|
10년 전 | 1427 | |
| 7440 | 10년 전 | 892 | ||
| 7439 |
|
10년 전 | 746 | |
| 7438 |
|
10년 전 | 924 | |
| 7437 |
basement
|
10년 전 | 1027 | |
| 7436 |
잘살아보자
|
10년 전 | 1118 | |
| 7435 | 10년 전 | 1076 | ||
| 7434 | 10년 전 | 3788 | ||
| 7433 |
|
10년 전 | 2728 | |
| 7432 |
alexkim
|
10년 전 | 856 | |
| 7431 |
이웃집초보
|
11년 전 | 1301 |
댓글 작성
댓글을 작성하시려면 로그인이 필요합니다.
로그인하기