json 에러 이유를 찾고 있습니다.
본문
json 로직에 무엇이 잘못된건지 에러로그가 생성되네요
방화벽에서 에러때문에 차단을 한거 같은데... 에러의 원인을 찾아야하는데, 도통 이유를 모르겠습니다.
에러 로그 입니다 -_-;;
[Tue Dec 05 03:51:36.145392 2023] [:error] [pid 20241] [client 211.211.211.211] ModSecurity: Warning. Match of "rx ^OPTIONS$" against "REQUEST_METHOD" required. [file "/usr/local/apache/conf/modsec_rules/modsecurity-global.conf"] [line "326"] [id "960015"] [msg "Request Missing an Accept Header"] [data ""] [severity "CRITICAL"] [tag "PROTOCOL_VIOLATION/MISSING_HEADER"] [hostname "www.happyjung.com"] [uri "/api/error_json.php"] [unique_id "ZW4fuDwq"]
error_json.php 내용은 다음과 같습니다
<?php
include_once('_common.php');
header('Content-type: application/json; charset=utf8');
if ($device_id) {
$sql_device = " select * from `order_device` where device_id = '{$device_id}' and agent_id != '' ";
$row_device = sql_fetch($sql_device);
if ($ping_error_wdate == '') $ping_error_wdate = date('Y-m-d H:i:s');
// 등록
if ($row_device['device_id']) {
$row_array = [ 'device_id' => $device_id, 'ping_error_sdate' => $ping_error_sdate, 'ping_error_wdate' => $ping_error_wdate, 'msg' => '정상' ];
if ($ping_error_sdate) {
$sql_up = " insert into `order_ping_error` (device_id, ping_error_sdate) values ('{$device_id}', '{$ping_error_sdate}') " ;
sql_query($sql_up);
}
} else{
$row_array = [ 'device_id' => $device_id, 'ping_error_sdate' => $ping_error_sdate, 'ping_error_wdate' => $ping_error_wdate, 'msg' => '미인증' ];
}
} else {
$row_array = [ 'device_id' => $device_id, 'ping_error_sdate' => $ping_error_sdate, 'ping_error_wdate' => $ping_error_wdate, 'msg' => '미등록' ];
}
echo json_encode($row_array, JSON_UNESCAPED_UNICODE);
답변 2
Request Missing an Accept Header
클라이언트가 서버로 보낸 요청에는 Accept 헤더가 없다고 합니다.
따라서 클라이언트 요청에 Accept 요청에 이 헤더를 추가시켜 주므로해서, 방화벽에서의 차단이 해제될 것으로 보입니다.
그렇다면...
보안도구가 해당요청을 차단하지 않도록 헤더부분에 header('Accept: application/json'); 추가 해줘보세요
로그는 모드시큐리티 문제인거 같네요. ID 960015 예외처리 하시거나 아니면 api로 사용하시는거면 api요청하실때 header에 'Accept': 'application/json' 추가해보시겠어요