encodeHTML - htmlspecialchars 대용 = 일반 문자열에 적합.

removeHackTag - 태그 허용하지만 embed등 제거 = 태그가 적용되어야할 글 내용에 적합.

 

정도만 알고 있는데 뭐가 또 있을까요? 다큐멘트 모듈같은 XE 개발팀이 만든 모듈에서도 XE의 함수가 아닌 htmlspecialchars같은 내장함수들을 남발하고 있어서 혼란스럽네요.

 

XE가 이스케이프나 필터링 용도로 만들어놓은 함수는 정확히 무엇무엇이 있나요?

  • profile

    encodeHTML - Security 클래스에서 제공하는 메소드입니다. Context에 들어 있는 변수들을 일괄적으로 이스케이프 처리하는 목적인데, 반환값이 따로 나오는 것도 아니고 사용 방법이나 배열 처리 문법 등의 매뉴얼화가 전혀 안 되어 있어서 사용하기가 꽤 어색합니다. 가능하면 이건 사용하지 마세요.

     

    removeHackTag - 글 내용, 댓글 내용 등 HTML 태그를 허용하면서 위험한 것만 제거하는 기능입니다.

     

    그 밖의 경우 그냥 htmlspecialchars를 쓰시면 됩니다. 필요한 기능을 정확하게 구현해 놓은 PHP 내장함수를 놔두고 굳이 성능이 떨어지는 다른 함수를 만들어 쓸 필요가 없습니다. encodeHTML을 쓸 만한 곳은 모두 htmlspecialchars로 대체할 수 있습니다. array_map과 병용하면 배열도 한꺼번에 이스케이프할 수 있습니다.

     

    그러나 htmlspecialchars 함수에 옵션으로 들어가는 3~4개의 다른 인자들 때문에 혼란스러워하시는 분들이 많아서, 라이믹스에서는 escape 함수를 별도로 제공하고 있습니다. htmlspecialchars와 같은 기능입니다.

     

    자세히 보면 removeSrcHack, blockWidgetCode 등 보안과 관련된 함수가 몇 개 더 있는데, 이건 removeHackTag 처리 과정에서 호출할 목적으로 만들어진 함수이므로 독립적으로 사용하는 것은 좋지 않습니다. XE 개발 초기에 이런 걸 클래스 안에 넣었어야 하는데 각각 전역함수로 정의하는 바람에 지저분해졌네요. (라이믹스에서는 제거됩니다.)

  • profile ?
    말씀하신대로 인자들 넣는게 복잡해서(구글링해보면 추천하는 조합도 제각각ㅜㅜ) 일관성있는 encodeHTML 이용했는데 이제부터는 바꿔봐야겠네요. 체감 성능차이는 크게 없어서 그냥 썼는데...

    라이믹스도 안정화가 되면 이용해보고 싶은데 아무래도 한창 개발방향이 잡혀가는 도중인듯해서 실사용하기는 망설여지는 면이 많네요. 코드 리팩토링이 됐다는 점이 정말 매력적인데 아쉬워요.
  • profile ?
    아, 그런데 혹시 XE의 htmlpurifier는 최신 버전으로 계속 패치가 되고 있는건가요?
  • ? profile
    아뇨 ㅠㅠ
  • ? profile
    encodeHTML의 장점 중 하나가 '..' 문법을 사용하면 배열도 한꺼번에 이스케이프해 준다는 건데, 아까 댓글 달고 나서 라이믹스에도 똑같은 기능을 가진 array_escape 함수를 추가했습니다.

    장기적으로는 템플릿에서 {$var} 이렇게 출력하는 변수를 모두 자동으로 이스케이프해 주는 것을 고려하고 있습니다. 글 내용처럼 이미 필터링된 경우만 제외하고요. 단, 기존 스킨과 레이아웃과의 호환성도 생각해야 하기 때문에 쉽지는 않을 것 같아요.