(재등록) 스마트 에디터로 이미지를 저장하려고 하는데 채택완료
랜딩페이지를 관리할 수 있는 어드민페이지를 만들고 있습니다.
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개
그누보드는 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
이거 참고해보세요 도움될거에요
댓글을 작성하려면 로그인이 필요합니다.
답변을 작성하려면 로그인이 필요합니다.
로그인