(재등록) 스마트 에디터로 이미지를 저장하려고 하는데

(재등록) 스마트 에디터로 이미지를 저장하려고 하는데

QA

(재등록) 스마트 에디터로 이미지를 저장하려고 하는데

그누보드5(영카트) 버전

5.5.15

사용 PHP 버전

8.4

본문

랜딩페이지를 관리할 수 있는 어드민페이지를 만들고 있습니다.

landing_form.php // form
landing_form_update.php // 데이터 저장

테이블로 별도로 만듦 g5_landing 

landing_form.php은 입력과 수정을 w=u 를 줘서 같이 처리하구요.

landing_form.php
페이지는


require_once './_common.php';
require_once G5_EDITOR_LIB;
이렇게 작성하고 아래처럼 출력하고 있습니다.

<?php echo editor_html("ld_content", $landing['ld_content'], 1); ?>
그리고 자바스크립트 부분은

<?php echo get_editor_js('ld_content', true);?>
이렇게 작성하여 자바스크립트에 이렇게 코드 들어오는 것 까지 확인했습니다.
document.getElementById('tx_ld_content').value = ed_ld_content.outputBodyHTML();
그런데 landing_form_update.php 에서 $_post를 찍어보면

<p><img src=\"https://depbreeze.mycafe24.com/data/editor/2509/20250911101655_f5569ab53dea59c4866c5266a8bc740c_l06t.gif\" alt=\"javaf_logo.gif\" style=\"width: 422px; height: 146px;\" /></p>
이렇게 역슬래시가 자동으로 들어가네요.

어떻게 해결해야 할까요?

근데 찾다보니 원인을 찾은거 같습니다.

update나 insert 를 위해서 set 문구를 만들어주는 함수를 만들었습니다.


function build_query(array $data):string {
    $set = array();
    foreach ($data as $key => $value) {
        if (is_null($value)){
            $set[] = "{$key} = NULL";
        }elseif (is_numeric($value) && !preg_match('/^0[0-9]+$/', $value)){
            $set[] = "{$key} = {$value}";
        }else {
            $escaped_value = sql_escape_string($value);
            $set[] = "{$key} = '{$escaped_value }'";
        }
    }
    return implode(",\n", $set);
}
에디터 부분 생성할때는

$escaped_value = sql_escape_string($value);

이 부분을 생략하고 그냥

$set[] = "{$key} = '{$value }'";

이렇게 했을 때 에러가 안나는데
에디터 데이터는 sql_escape_string 를 하면 안되나봐요?

그럼  build_query함수를 분기 처리해야 겠죠?
 

이 질문에 댓글 쓰기 :

답변 2

그누보드는 common.php를 거치면 addslash가 됩니다.

 

// SQL Injection 대응 문자열 필터링

function sql_escape_string($str)

{

    if(defined('G5_ESCAPE_PATTERN') && defined('G5_ESCAPE_REPLACE')) {

        $pattern = G5_ESCAPE_PATTERN;

        $replace = G5_ESCAPE_REPLACE;

 

        if($pattern)

            $str = preg_replace($pattern, $replace, $str);

    }

 

    $str = call_user_func('addslashes', $str);

 

    return $str;

}

어드민만 쓰시고 보안적으로 문제 없다면  업데이트쪽에서 $_POST를 받아서 다시 stripslash 해서 저장하시거나 불러올때 strip 하는 방법이 있습니다.

 

어드민 페이지내에선 이스케이프처리 할필요 없을것 같아요

프론트쪽이 보안이 중요해보여요  clean_xss_tags() 이걸로도 함수처리 가능해요

https://phsun102.tistory.com/98

이거 참고해보세요 도움될거에요

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

회원로그인

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