Skip to content

Commit 343f6f9

Browse files
committed
不正なクエリパラメータの時は 403 Forbiddenを返す。
1 parent 031230d commit 343f6f9

3 files changed

Lines changed: 63 additions & 18 deletions

File tree

petitnote/functions.php

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
//Petit Note (c)さとぴあ @satopian 2021-2026 MIT License
33
//https://paintbbs.sakura.ne.jp/
44

5-
$functions_ver=20260614;
5+
$functions_ver=20260615;
66

77
/**
88
* 編集モードログアウト
@@ -1964,3 +1964,27 @@ function filter_input_data(string $input, string $key, int $filter=FILTER_UNSAFE
19641964
}
19651965
return $value;
19661966
}
1967+
/**
1968+
* 不正なクエリパラメータの時は 403 Forbiddenを返す
1969+
*/
1970+
function validateQueryParameters(){
1971+
$resno=filter_input_data('GET','resno',FILTER_VALIDATE_INT);
1972+
$page=filter_input_data('GET','page',FILTER_VALIDATE_INT);
1973+
$id=filter_input_data('GET','id',FILTER_VALIDATE_INT);
1974+
$resid=filter_input_data('GET','resid',FILTER_VALIDATE_INT);
1975+
$res_catalog=filter_input_data('GET','res_catalog',FILTER_VALIDATE_BOOLEAN);
1976+
$misskey_note=filter_input_data('GET','misskey_note',FILTER_VALIDATE_BOOLEAN);
1977+
//フィルタが失敗した時はfalse
1978+
if(
1979+
$resno===false||
1980+
$page===false||
1981+
$id===false||
1982+
$resid===false||
1983+
$res_catalog===false||
1984+
$misskey_note===false
1985+
)
1986+
{
1987+
header("HTTP/1.1 403 Forbidden");
1988+
exit();
1989+
}
1990+
}

petitnote/index.php

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@
33
//https://paintbbs.sakura.ne.jp/
44
//1スレッド1ログファイル形式のスレッド式画像掲示板
55

6-
$petit_ver='v2.0.5';
7-
$petit_lot='lot.20260614.1';
6+
$petit_ver='v2.0.6';
7+
$petit_lot='lot.20260615';
88

99
$lang = ($http_langs = $_SERVER['HTTP_ACCEPT_LANGUAGE'] ?? '')
1010
? explode( ',', $http_langs )[0] : '';
@@ -20,7 +20,7 @@
2020
die(__DIR__.'/functions.php'.($en ? ' does not exist.':'がありません。'));
2121
}
2222
require_once(__DIR__.'/functions.php');
23-
if(!isset($functions_ver)||$functions_ver<20260614){
23+
if(!isset($functions_ver)||$functions_ver<20260615){
2424
die($en?'Please update functions.php to the latest version.':'functions.phpを最新版に更新してください。');
2525
}
2626

@@ -38,7 +38,7 @@
3838

3939
check_file(__DIR__.'/search.inc.php');
4040
require_once(__DIR__.'/search.inc.php');
41-
if(!isset($search_inc_ver)||$search_inc_ver<20260614){
41+
if(!isset($search_inc_ver)||$search_inc_ver<20260615){
4242
die($en?'Please update search.inc.php to the latest version.':'search.inc.phpを最新版に更新してください。');
4343
}
4444

petitnote/search.inc.php

Lines changed: 34 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
//Petit Note (c)さとぴあ @satopian 2021-2026 MIT License
33
//https://paintbbs.sakura.ne.jp/
44

5-
$search_inc_ver = 20260614;
5+
$search_inc_ver = 20260615;
66
class processsearch
77
{
88

@@ -13,19 +13,10 @@ class processsearch
1313

1414
private static function init(): void
1515
{
16-
17-
$gets=filter_input_array(INPUT_GET) ?? [];
18-
19-
// 許可リストをキーにした配列を作成
20-
$allowed_keys = array_fill_keys(['mode', 'radio', 'imgsearch', 'q','page'], true);
21-
// 不正なキーを抽出
22-
$invalid_keys = array_diff_key($gets, $allowed_keys);
23-
if (!empty($invalid_keys)) {
24-
header("HTTP/1.1 403 Forbidden");
25-
exit();
26-
}
2716

28-
self::$imgsearch = (bool)filter_input_data('GET', 'imgsearch', FILTER_VALIDATE_BOOLEAN);
17+
self::validateQueryParameters();
18+
19+
self::$imgsearch = (bool)filter_input_data('GET', 'imgsearch', FILTER_VALIDATE_BOOLEAN);
2920
self::$page = (int)filter_input_data('GET', 'page', FILTER_VALIDATE_INT);
3021
self::$q = (string)filter_input_data('GET', 'q');
3122
self::$radio = (int)filter_input_data('GET', 'radio', FILTER_VALIDATE_INT);
@@ -305,4 +296,34 @@ private static function create_formatted_text_for_search(?string $str): string
305296

306297
return $s_str;
307298
}
299+
/**
300+
* 不正なクエリパラメータの時は 403 Forbiddenを返す
301+
* @return void
302+
*/
303+
private static function validateQueryParameters(): void{
304+
305+
$gets=filter_input_array(INPUT_GET) ?? [];
306+
// 許可リストをキーにした配列を作成
307+
$allowed_keys = array_fill_keys(['mode', 'radio', 'imgsearch', 'q','page'], true);
308+
// 不正なキーを抽出
309+
$invalid_keys = array_diff_key($gets, $allowed_keys);
310+
311+
$page=filter_input_data('GET','page',FILTER_VALIDATE_INT);
312+
$radio=filter_input_data('GET','radio',FILTER_VALIDATE_INT);
313+
$imgsearch=filter_input_data('GET','imgsearch');
314+
$imagSearchOptions =["on","off"];
315+
$isAllowedOption = in_array($imgsearch,$imagSearchOptions);
316+
317+
//フィルタが失敗した時はfalse
318+
if(
319+
!empty($invalid_keys)||
320+
$page===false||
321+
$radio===false||
322+
$imgsearch && $isAllowedOption===false
323+
)
324+
{
325+
header("HTTP/1.1 403 Forbidden");
326+
exit();
327+
}
328+
}
308329
}

0 commit comments

Comments
 (0)