htmlspecialchars_decode 를 쓰면 보안상 문제가 없을까요?
htmlspecialchars로는 글자 볼드나 색깔 입력시
태그가 그대로 노출이 되어서
다른 위젯 뜯어보니 이런 식으로 처리하고 있던데
괜찮을까요?
htmlspecialchars_decode 를 쓰면 보안상 문제가 없을까요?
htmlspecialchars로는 글자 볼드나 색깔 입력시
태그가 그대로 노출이 되어서
다른 위젯 뜯어보니 이런 식으로 처리하고 있던데
괜찮을까요?
@기진곰
추가 질문입니다. 제가 사용하는 최근글 위젯 대다수가 아래와 같은 클래스 코드이던데
이러면 기진곰님이 말씀하신 대로 수정할 필요 없이 그냥 위젯을 사용하면 될까요?
비교적 최근 자료인데도 이런 걸 봐서는 비슷한 보안이 되어 있나 싶어서
여쭈어 봅니다.
function getTitle($cut_size = 0, $tail='...')
{
$title = strip_tags($this->get('title'));
if($cut_size) $title = cut_str($title, $cut_size, $tail);
$attrs = array();
if($this->get('title_bold') == 'Y') $attrs[] = 'font-weight:bold';
if($this->get('title_color') && $this->get('title_color') != 'N') $attrs[] = 'color:#'.$this->get('title_color');
if(count($attrs)) $title = sprintf("<span style=\"%s\">%s</span>", implode(';', $attrs), htmlspecialchars($title));
return $title;
}
아니면 위젯 클래스 php 파일에서
if($this->get('title_bold') == 'Y') $attrs[] = 'font-weight:bold';
if($this->get('title_color') && $this->get('title_color') != 'N') $attrs[] = 'color:#'.$this->get('title_color');
if(count($attrs)) $title = sprintf("<span style=\"%s\">%s</span>", implode(';', $attrs), htmlspecialchars($title));
이 부분을 아예 지워버리고 기진곰님이 말씀하신 코드로 변경하는 건 어떨까요?
위 소스 때문에 위젯 스킨 적용시 기진곰님 소스를 쓰면 글자 볼드나 색상이 들어가면 태그가 그대로 노출되네요 ㅠ
현존하는 최근글 위젯 대다수가 엉터리입니다. 예전에 엉터리로 만든 XE 기본 content 위젯을 베꼈거든요. XE 기본 위젯은 패치가 되었는데 서드파티 위젯들은 옛날 상태 그대로입니다.
이유를 불문하고 htmlspecialchars를 사용할 때 제가 위에서 언급한 4개의 옵션(처리할 변수, ENT_ 옵션, UTF-8 문자셋, 마지막 false)을 모두 넣지 않았다면 잘못 작성된 코드입니다.
제목 색깔이나 진하게 표현을 할 필요가 없다면 함수 윗부분 cut_str 바로 아래에서
return htmlspecialchars($this->get('title'), ENT_QUOTES, 'UTF-8', false);
해버리면 됩니다.
전혀 괜찮지 않습니다. 함부로 decode하면 잘못 인코딩된 것뿐 아니라 보안상 문제가 될 수 있는 것까지 모두 디코딩되어 버립니다.
위젯 스킨에서 처음부터 htmlspecialchars($제목변수, ENT_COMPAT, 'UTF-8', false); 이렇게 제대로 처리한다면 별도로 decode를 해줄 필요가 없습니다. 꼭 decode를 해야겠다면 decode한 후에 이 코드를 다시 한 번 적용해 주세요. 마지막에 false가 제일 중요합니다.