보안 문제 때문에 위젯 스킨 적용시 위젯 제목에
htmlspecialchars($제목변수, ENT_COMPAT, 'UTF-8', false);
코드를 적용하였더니
글자 볼드나 색상 태그(<span style="color:#00007f">)가 그대로 노출이 됩니다.
위젯 class 파일을 열었더니 아래와 같은 코드가 있습니다.
잘은 모르겠지만 글자 스타일과 관련된 태그는 통과시켜주는 코드로 보입니다.
그래서 충돌이 있는 듯 한데요.
위젯 클래스 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));
이 부분과 htmlspecialchars($제목변수, ENT_COMPAT, 'UTF-8', false);의 동시 작용으로
나타나는 현상 같은데 차라리 이 위젯 클래스 소스를 지우고
if(count($attrs)) $title = sprintf("<span style=\"%s\">%s</span>", implode(';', $attrs), htmlspecialchars($title)); 대신
if(count($attrs)) $title = sprintf({htmlspecialchars($title, ENT_COMPAT, 'UTF-8', false);});를
삽입하고 위젯 스킨단에서는 그냥 htmlspeicalchars($title)로 출력하면 될라나요?
물론 보안상 문제가 없는지 여쭈어 보는 겁니다.
아니면 애초에 위와 같은 위젯 class 코드를 가진 위젯들은
스킨 적용시 단순히 {$item->getTitle()}과
같은 방식으로 출력해도 상관이 없는 건가요?
라이믹스 기본 컨텐츠 위젯이 위와 같은 class 소드 코드를 가지고
스킨단에서는 {$item->getTitle()}로 출력을 하고 있어서 혼란이 오네요
클래스에서 이미 htmlspecialchars를 했다면 스킨에서 다시 할 필요는 없습니다. 그러나 마지막 false까지 모두 들어가지 않은 htmlspecialchars가 눈에 띈다면 죄다 고쳐보시기를 제안합니다.