보안 문제 때문에 위젯 스킨 적용시 위젯 제목에

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()}로 출력을 하고 있어서 혼란이 오네요

  • profile

    클래스에서 이미 htmlspecialchars를 했다면 스킨에서 다시 할 필요는 없습니다. 그러나 마지막 false까지 모두 들어가지 않은 htmlspecialchars가 눈에 띈다면 죄다 고쳐보시기를 제안합니다.

  • profile ?
    덕분에 잘 고쳤습니다. 항상 감사합니다.