json 에러 이유를 찾고 있습니다.

매출이 오르면 내리는 수수료! 지금 수수료센터에서 전자결제(PG)수수료 비교견적 신청해 보세요!
json 에러 이유를 찾고 있습니다.

QA

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'); 추가 해줘보세요

 

내용을 추가하고 로그 쌓이는 것을 보니 ... 같은 메시지가 뜹니다.
무엇을 더 봐야 할까요?

[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"]

혹시 아파치 라고한다면? 헥스파일에 추가해보세요

Header set Access-Control-Allow-Origin "*"
Header set Access-Control-Allow-Methods "GET, POST, OPTIONS"
Header set Access-Control-Allow-Headers "Content-Type"

만약에 않되면 직접 추가로 추가 해보시구요

<?php
header("Access-Control-Allow-Origin: *");
header("Access-Control-Allow-Methods: GET, POST, OPTIONS");
header("Access-Control-Allow-Headers: Content-Type");

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

답변을 작성하시기 전에 로그인 해주세요.
전체 126
QA 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT