테스트 사이트 - 개발 중인 베타 버전입니다

json 에러 이유를 찾고 있습니다. 채택완료

해피정 1년 전 조회 2,032

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개

채택된 답변
+20 포인트
웅푸
1년 전

Request Missing an Accept Header

클라이언트가 서버로 보낸 요청에는 Accept 헤더가 없다고 합니다.

따라서 클라이언트 요청에 Accept 요청에 이 헤더를 추가시켜 주므로해서, 방화벽에서의 차단이 해제될 것으로 보입니다.

그렇다면... 

보안도구가 해당요청을 차단하지 않도록 헤더부분에 header('Accept: application/json'); 추가 해줘보세요

 

로그인 후 평가할 수 있습니다

답변에 대한 댓글 6개

웅프
1년 전
<?php
include_once('_common.php');
header('Content-type: application/json; charset=utf8');
header('Accept: application/json');
해피정
1년 전
내용을 추가하고 로그 쌓이는 것을 보니 ... 같은 메시지가 뜹니다.
무엇을 더 봐야 할까요?

[Wed Dec 06 08:51:07.961926 2023] [:error] [pid 25372] [client 211.111.111.111] 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/ping_json.php"] [unique_id "ZW@3a5dPgKgF"]
웅프
1년 전
혹시 아파치 라고한다면? 헥스파일에 추가해보세요

Header set Access-Control-Allow-Origin "*"
Header set Access-Control-Allow-Methods "GET, POST, OPTIONS"
Header set Access-Control-Allow-Headers "Content-Type"
웅프
1년 전
만약에 않되면 직접 추가로 추가 해보시구요

<?php
header("Access-Control-Allow-Origin: *");
header("Access-Control-Allow-Methods: GET, POST, OPTIONS");
header("Access-Control-Allow-Headers: Content-Type");
웅프
1년 전
그래도않된다면 혹시 개인 서버이시면 리눅스 어떤것 셋팅되었는지 알수 있을까요?
일단 위 사항을 한번해보세요
해피정
1년 전
감사합니다. ^^

댓글을 작성하려면 로그인이 필요합니다.

v
1년 전

로그는 모드시큐리티 문제인거 같네요. ID 960015 예외처리 하시거나 아니면 api로 사용하시는거면 api요청하실때 header에 'Accept': 'application/json' 추가해보시겠어요

로그인 후 평가할 수 있습니다

답변에 대한 댓글 1개

해피정
1년 전
감사합니다.

댓글을 작성하려면 로그인이 필요합니다.

답변을 작성하려면 로그인이 필요합니다.

로그인