[security]KVE-2026-0787 alert() JavaScript 이스케이프 누락 Stored XSS 수정

bbs/alert.php, bbs/alert_close.php 가 alert("$msg") 형태로 메시지를
JS 문자열 컨텍스트에 직접 삽입하던 부분을 수정. lib/common.lib.php 에
PHP 5.2 호환 폴백을 갖춘 get_js_safe_string() 헬퍼를 추가하고,
호출부에는 function_exists 가드를 걸어 부분 패치 환경에서도 안전하게
폴백되도록 함.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
thisgun
2026-05-26 03:31:24 +00:00
co-authored by Claude Opus 4.7
parent 7119b4f612
commit 3de722d3df
3 changed files with 36 additions and 2 deletions
+34
View File
@@ -179,6 +179,40 @@ function get_cookie($cookie_name)
}
// JavaScript 문자열 컨텍스트에 삽입할 값을 안전하게 이스케이프하여 따옴표를 포함한 JS 리터럴로 반환
// PHP 5.3+ 에서는 json_encode 의 JSON_HEX_* 플래그를 사용하고, 5.2 환경에서는 직접 치환으로 폴백
if (!function_exists('get_js_safe_string')) {
function get_js_safe_string($s)
{
$s = (string)$s;
if (defined('JSON_HEX_TAG')) {
$flags = JSON_HEX_TAG | JSON_HEX_AMP | JSON_HEX_APOS | JSON_HEX_QUOT;
if (defined('JSON_UNESCAPED_UNICODE')) {
$flags |= JSON_UNESCAPED_UNICODE;
}
$encoded = @json_encode($s, $flags);
if ($encoded !== false && $encoded !== null) {
return $encoded;
}
}
return '"' . strtr($s, array(
'\\' => '\\\\',
'"' => '\\"',
"'" => '\\u0027',
'/' => '\\/',
"\r" => '\\r',
"\n" => '\\n',
"\t" => '\\t',
'<' => '\\u003C',
'>' => '\\u003E',
'&' => '\\u0026',
"\xE2\x80\xA8" => '\\u2028',
"\xE2\x80\xA9" => '\\u2029',
)) . '"';
}
}
// 경고메세지를 경고창으로
function alert($msg='', $url='', $error=true, $post=false)
{