strstr()은 일치하는 부분 문자열 전체를 반환하므로 존재 여부만 체크할 때는 메모리 할당이 낭비됨. strpos()는 위치(int) 또는 false만 반환하여 메모리 할당 없이 더 빠르게 동일 동작 수행. 적용 파일 (19개, 약 25곳): - lib/common.lib.php: wr_option html1/html2/secret 검사 3곳 - lib/shop.lib.php: de_taxsave_types 검사 2곳 - lib/latest.lib.php: wr_option secret 검사 1곳 - lib/thumbnail.lib.php: wr_option secret 검사 1곳 - lib/URI/uri.class.php: URI 확장자 검사 1곳 - bbs/view.php: subject/wr_option/content 검사 4곳 - bbs/view_comment.php: wr_option secret 검사 1곳 - bbs/search.php: wr_option/sfl 검사 3곳 - bbs/rss.php: wr_option html 검사 1곳 - bbs/write_update.php: html1/html2 검사 2곳 - bbs/move_update.php: wr_option html 검사 1곳 - adm/admin.lib.php: auth 권한 검사 1곳 - adm/admin.head.php: 메뉴 권한 검사 1곳 - adm/session_file_delete.php: sess_ prefix 검사 1곳 - adm/point_list.php, adm/auth_list.php: sfl mb_id 검사 2곳 - adm/sms_admin/_common.php: install.php 검사 1곳 - adm/shop_admin/configform.php: de_taxsave_types 검사 3곳 - head.sub.php: admin dir 검사 1곳 규칙: strstr($a, $b) → strpos($a, $b) !== false !strstr($a, $b) → strpos($a, $b) === false 제외: - theme/, skin/, plugin/ (사용자 커스터마이징/서드파티) - strstr() 반환값을 실제로 사용하는 케이스 (예: lib/common.lib.php:4135 if( \$freg = strstr(\$ori_params, '#') ), extend/gif2mp4.extend.php)
91 lines
2.9 KiB
PHP
91 lines
2.9 KiB
PHP
<?php
|
|
include_once('./_common.php');
|
|
|
|
// 특수문자 변환
|
|
function specialchars_replace($str, $len=0) {
|
|
if ($len) {
|
|
$str = substr($str, 0, $len);
|
|
}
|
|
|
|
$str = str_replace(array("&", "<", ">"), array("&", "<", ">"), $str);
|
|
|
|
/*
|
|
$str = preg_replace("/&/", "&", $str);
|
|
$str = preg_replace("/</", "<", $str);
|
|
$str = preg_replace("/>/", ">", $str);
|
|
*/
|
|
|
|
return $str;
|
|
}
|
|
|
|
$sql = " select gr_id, bo_subject, bo_page_rows, bo_read_level, bo_use_rss_view from {$g5['board_table']} where bo_table = '$bo_table' ";
|
|
$row = sql_fetch($sql);
|
|
$subj2 = specialchars_replace($row['bo_subject'], 255);
|
|
$lines = $row['bo_page_rows'];
|
|
|
|
// 비회원 읽기가 가능한 게시판만 RSS 지원
|
|
if ($row['bo_read_level'] >= 2) {
|
|
echo '비회원 읽기가 가능한 게시판만 RSS 지원합니다.';
|
|
exit;
|
|
}
|
|
|
|
// RSS 사용 체크
|
|
if (!$row['bo_use_rss_view']) {
|
|
echo 'RSS 보기가 금지되어 있습니다.';
|
|
exit;
|
|
}
|
|
|
|
header('Content-type: text/xml');
|
|
header('Cache-Control: no-cache, must-revalidate');
|
|
header('Pragma: no-cache');
|
|
|
|
$sql = " select gr_subject from {$g5['group_table']} where gr_id = '{$row['gr_id']}' ";
|
|
$row = sql_fetch($sql);
|
|
$subj1 = specialchars_replace($row['gr_subject'], 255);
|
|
|
|
echo '<?xml version="1.0" encoding="utf-8" ?>'."\n";
|
|
?>
|
|
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
|
|
<channel>
|
|
<title><?php echo specialchars_replace($config['cf_title'].' > '.$subj1.' > '.$subj2); ?></title>
|
|
<link><?php echo specialchars_replace(get_pretty_url($bo_table)); ?></link>
|
|
<language>ko</language>
|
|
<?php
|
|
$sql = " select wr_id, wr_subject, wr_content, wr_name, wr_datetime, wr_option
|
|
from {$g5['write_prefix']}$bo_table
|
|
where wr_is_comment = 0
|
|
and wr_option not like '%secret%'
|
|
order by wr_num, wr_reply limit 0, $lines ";
|
|
$result = sql_query($sql);
|
|
for ($i=0; $row=sql_fetch_array($result); $i++) {
|
|
$file = '';
|
|
|
|
if (strpos($row['wr_option'], 'html') !== false)
|
|
$html = 1;
|
|
else
|
|
$html = 0;
|
|
|
|
if ($i === 0) {
|
|
echo '<description>'. specialchars_replace($subj2). ' ('. $row['wr_datetime'] .')</description>'.PHP_EOL;
|
|
}
|
|
?>
|
|
|
|
<item>
|
|
<title><?php echo specialchars_replace($row['wr_subject']); ?></title>
|
|
<link><?php echo specialchars_replace(get_pretty_url($bo_table, $row['wr_id'])); ?></link>
|
|
<description><![CDATA[<?php echo $file ?><?php echo conv_content($row['wr_content'], $html) ?>]]></description>
|
|
<dc:creator><?php echo specialchars_replace($row['wr_name']) ?></dc:creator>
|
|
<?php
|
|
$date = $row['wr_datetime'];
|
|
// rss 리더 스킨으로 호출하면 날짜가 제대로 표시되지 않음
|
|
$date = substr($date,0,10) . "T" . substr($date,11,8) . "+09:00";
|
|
//$date = date('r', strtotime($date)); // 구글 서치 콘솔에서 오류가 난다
|
|
?>
|
|
<dc:date><?php echo $date ?></dc:date>
|
|
</item>
|
|
|
|
<?php
|
|
}
|
|
|
|
echo '</channel>'."\n";
|
|
echo '</rss>'."\n";
|