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

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

세진컴퓨터랜드 1개월 전 조회 144

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

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=\"<a href="https://depbreeze.mycafe24.com/data/editor/2509/20250911101655_f5569ab53dea59c4866c5266a8bc740c_l06t.gif\"" target="_blank" rel="noopener noreferrer">https://depbreeze.mycafe24.com/data/editor/2509/20250911101655_f5569ab53dea59c4866c5266a8bc740c_l06t.gif\"</a> alt=\"javaf_logo.gif\" style=\"width: 422px; height: 146px;\" /></p>

이렇게 역슬래시가 자동으로 들어가네요.

어떻게 해결해야 할까요?

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

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

function build_query(array $data):string {

    $set = array();</p>

<p>    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개

채택된 답변
+20 포인트
ifelse
1개월 전

그누보드는 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 하는 방법이 있습니다.

 

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

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

1개월 전

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

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

https://phsun102.tistory.com/98

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

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

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

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

로그인