1. 정확한 제품 또는 플러그인 이름
- KBoard 게시판 6.3
- User Role Editor Pro 4.61
2. 상세 내용
Kboard 플러그인을 User Role Editor 플러그인과 같이 사용중입니다.
https://imgur.com/W8NZwjB
그런데 종종 Kboard 게시판 설정 페이지로 들어가려 하면 HTTP 500 오류가 발생될 때가 있습니다.
이럴 때 웹 서버에서 로그를 보면 아래와 같은 로그들이 기록됩니다.
(아래 로그는 한번에 기록된 것은 아니며, 오류나는 라인마다 순차적으로 "./plugins/kboard/pages/kboard_setting.php" 코드를 수정하며 기록된 내용입니다.)
[Thu Apr 13 11:09:32.381390 2023] [proxy_fcgi:error] [pid 17721:tid 140468453357312] [remote 211.x.x.30:43867] AH01071: Got error 'PHP message: PHP Fatal error: Uncaught TypeError: in_array(): Argument #2 ($haystack) must be of type array, string given in /home/WWW/docroot/wp-content/plugins/kboard/pages/kboard_setting.php:471\nStack trace:\n#0 /home/WWW/docroot/wp-content/plugins/kboard/pages/kboard_setting.php(471): in_array()\n#1 /home/WWW/docroot/wp-content/plugins/kboard/index.php(390): include_once('...')\n#2 /home/WWW/docroot/wp-content/plugins/kboard/index.php(335): kboard_setting()\n#3 /home/WWW/docroot/wp-includes/class-wp-hook.php(308): kboard_list()\n#4 /home/WWW/docroot/wp-includes/class-wp-hook.php(332): WP_Hook->apply_filters()\n#5 /home/WWW/docroot/wp-includes/plugin.php(517): WP_Hook->do_action()\n#6 /home/WWW/docroot/wp-admin/admin.php(259): do_action()\n#7 {main}\n thrown in /home/WWW/docroot/wp-content/plugins/kboard/pages/kboard_setting.php on line 471', referer: https://site.ac.kr/wp-admin/admin.php?page=kboard_list
[Thu Apr 13 11:10:28.628829 2023] [proxy_fcgi:error] [pid 17721:tid 140468436571904] [remote 211.x.x.30:45124] AH01071: Got error 'PHP message: PHP Fatal error: Uncaught TypeError: in_array(): Argument #2 ($haystack) must be of type array, string given in /home/WWW/docroot/wp-content/plugins/kboard/pages/kboard_setting.php:502\nStack trace:\n#0 /home/WWW/docroot/wp-content/plugins/kboard/pages/kboard_setting.php(502): in_array()\n#1 /home/WWW/docroot/wp-content/plugins/kboard/index.php(390): include_once('...')\n#2 /home/WWW/docroot/wp-content/plugins/kboard/index.php(335): kboard_setting()\n#3 /home/WWW/docroot/wp-includes/class-wp-hook.php(308): kboard_list()\n#4 /home/WWW/docroot/wp-includes/class-wp-hook.php(332): WP_Hook->apply_filters()\n#5 /home/WWW/docroot/wp-includes/plugin.php(517): WP_Hook->do_action()\n#6 /home/WWW/docroot/wp-admin/admin.php(259): do_action()\n#7 {main}\n thrown in /home/WWW/docroot/wp-content/plugins/kboard/pages/kboard_setting.php on line 502', referer: https://site.ac.kr/wp-admin/admin.php?page=kboard_list
[Thu Apr 13 11:11:13.217185 2023] [proxy_fcgi:error] [pid 17721:tid 140467995842304] [remote 211.x.x.30:40817] AH01071: Got error 'PHP message: PHP Fatal error: Uncaught TypeError: in_array(): Argument #2 ($haystack) must be of type array, string given in /home/WWW/docroot/wp-content/plugins/kboard/pages/kboard_setting.php:592\nStack trace:\n#0 /home/WWW/docroot/wp-content/plugins/kboard/pages/kboard_setting.php(592): in_array()\n#1 /home/WWW/docroot/wp-content/plugins/kboard/index.php(390): include_once('...')\n#2 /home/WWW/docroot/wp-content/plugins/kboard/index.php(335): kboard_setting()\n#3 /home/WWW/docroot/wp-includes/class-wp-hook.php(308): kboard_list()\n#4 /home/WWW/docroot/wp-includes/class-wp-hook.php(332): WP_Hook->apply_filters()\n#5 /home/WWW/docroot/wp-includes/plugin.php(517): WP_Hook->do_action()\n#6 /home/WWW/docroot/wp-admin/admin.php(259): do_action()\n#7 {main}\n thrown in /home/WWW/docroot/wp-content/plugins/kboard/pages/kboard_setting.php on line 592', referer: https://site.ac.kr/wp-admin/admin.php?page=kboard_list
[Thu Apr 13 11:12:07.234887 2023] [proxy_fcgi:error] [pid 17721:tid 140468394608384] [remote 211.x.x.30:49701] AH01071: Got error 'PHP message: PHP Fatal error: Uncaught TypeError: in_array(): Argument #2 ($haystack) must be of type array, string given in /home/WWW/docroot/wp-content/plugins/kboard/pages/kboard_setting.php:616\nStack trace:\n#0 /home/WWW/docroot/wp-content/plugins/kboard/pages/kboard_setting.php(616): in_array()\n#1 /home/WWW/docroot/wp-content/plugins/kboard/index.php(390): include_once('...')\n#2 /home/WWW/docroot/wp-content/plugins/kboard/index.php(335): kboard_setting()\n#3 /home/WWW/docroot/wp-includes/class-wp-hook.php(308): kboard_list()\n#4 /home/WWW/docroot/wp-includes/class-wp-hook.php(332): WP_Hook->apply_filters()\n#5 /home/WWW/docroot/wp-includes/plugin.php(517): WP_Hook->do_action()\n#6 /home/WWW/docroot/wp-admin/admin.php(259): do_action()\n#7 {main}\n thrown in /home/WWW/docroot/wp-content/plugins/kboard/pages/kboard_setting.php on line 616', referer: https://site.ac.kr/wp-admin/admin.php?page=kboard_list
[Thu Apr 13 11:12:48.236774 2023] [proxy_fcgi:error] [pid 17540:tid 140468470142720] [remote 211.x.x.30:44037] AH01071: Got error 'PHP message: PHP Fatal error: Uncaught TypeError: in_array(): Argument #2 ($haystack) must be of type array, string given in /home/WWW/docroot/wp-content/plugins/kboard/pages/kboard_setting.php:643\nStack trace:\n#0 /home/WWW/docroot/wp-content/plugins/kboard/pages/kboard_setting.php(643): in_array()\n#1 /home/WWW/docroot/wp-content/plugins/kboard/index.php(390): include_once('...')\n#2 /home/WWW/docroot/wp-content/plugins/kboard/index.php(335): kboard_setting()\n#3 /home/WWW/docroot/wp-includes/class-wp-hook.php(308): kboard_list()\n#4 /home/WWW/docroot/wp-includes/class-wp-hook.php(332): WP_Hook->apply_filters()\n#5 /home/WWW/docroot/wp-includes/plugin.php(517): WP_Hook->do_action()\n#6 /home/WWW/docroot/wp-admin/admin.php(259): do_action()\n#7 {main}\n thrown in /home/WWW/docroot/wp-content/plugins/kboard/pages/kboard_setting.php on line 643', referer: https://site.ac.kr/wp-admin/admin.php?page=kboard_list
[Thu Apr 13 11:13:13.513040 2023] [proxy_fcgi:error] [pid 17540:tid 140468386215680] [remote 211.x.x.30:39863] AH01071: Got error 'PHP message: PHP Warning: Undefined array key "roles" in /home/WWW/docroot/wp-content/plugins/kboard/pages/kboard_setting.php on line 1240PHP message: PHP Fatal error: Uncaught TypeError: in_array(): Argument #2 ($haystack) must be of type array, null given in /home/WWW/docroot/wp-content/plugins/kboard/pages/kboard_setting.php:1240\nStack trace:\n#0 /home/WWW/docroot/wp-content/plugins/kboard/pages/kboard_setting.php(1240): in_array()\n#1 /home/WWW/docroot/wp-content/plugins/kboard/index.php(390): include_once('...')\n#2 /home/WWW/docroot/wp-content/plugins/kboard/index.php(335): kboard_setting()\n#3 /home/WWW/docroot/wp-includes/class-wp-hook.php(308): kboard_list()\n#4 /home/WWW/docroot/wp-includes/class-wp-hook.php(332): WP_Hook->apply_filters()\n#5 /home/WWW/docroot/wp-includes/plugin.php(517): WP_Hook->do_action()\n#6 /home/WWW/docroot/wp-admin/admin.php(259): do_action()\n#7 {main}\n thrown in /home/WWW/docroot/wp-content/plugins/kboard/pages/kboard_setting.php on line 1240', referer: https://site.ac.kr/wp-admin/admin.php?page=kboard_list
3. 확인 가능한 상세 페이지 주소
- 사이트 보안상 웹사이트를 공개할수 없어 위 로그에도 사이트 주소 및 접속 IP 주소를 임의로 변경했습니다.
4. 수정한 코드 내역 (있다면)
위 로그에 기록된 line 471, 502, 592, 616, 643, 1240 행 마다 순차적으로 아래 예시와 같은 식으로
"./plugins/kboard/pages/kboard_setting.php" 코드를 수정하여 게시판 설정 페이지에 500 오류 없이 들어갈 수 있었습니다.
- "line 471"인 경우 수정한 코드 예시
원본: <?php if($key=='administrator' || in_array($key, $read_roles)):?>
수정: <?php if($key=='administrator' || in_array($key, $read_roles ? $read_roles:[])):?>
- "line 1240"인 경우 수정한 코드 예시
원본: <?php if($roles_key=='administrator' || in_array($roles_key, $item['roles'])):?>
수정: <?php if($roles_key=='administrator' || in_array($roles_key, isset($item['roles']) ? $item['roles']:[])):?>
위와같이 수정하여 게시판 설정에 들어간 후, (아무런 변경없이)설정된 게시판 내용을 한번 저장을 해 주고나면,
위에 수정한 코드를 Kboard 배포 원본 코드로 롤백해도 이후로는 500 오류는 안 생깁니다.
이런 경험을 벌써 여러차례 하고 있는데요... 게시판 권한 설정 후 저장시 뭔가 꼬이면 이러한 오류가 발생되는 것 같아서 개선조치가 필요해 보입니다.
감사합니다.
참고로 위 오류가 발생된 정황 상 원인을 생각해보니...
User Role Editor에 의해 Kborad 게시판 관리권한을 부여받은 이용자(워드프레스 administrator 권한은 없는 이용자)가
Kboard 특정 게시판 설정으로 가서 "변경사항 저장"을 한 후, KBoard 게시판 목록에서 동일 게시판 설정으로 접속하려 하면 이런 오류가 발생되는 것 같습니다.
이렇듯, 워드프레스 administrator 권한이 없는 이용자가 KBoard 게시판 설정을 하고 난 후로는 워드프레스 administrator 권한을 갖은 이용자라 할 지라도 게시판 목록에서 동일 게시판 설정에 접속하려하면 이와같은 오류가 발생됩니다.