별도 제작된 모듈에 {htmlspecialchars($변수 -> xxx()} 이런식으로 입력된 값을 가져오는 곳이 있는데 입력된 값의 html 코드가 그대로 노출되는것을 html 코드가 적용되게끔 {($변수 -> xxx()} 형태로 바로 사용을 하려고 합니다.
htmlspecialchars 사용하는 이유가 보안이슈 ( https://xetown.com/topics/1090911 ) 때문에 사용을 하는것으로 이해가 되는데요.
변수에 값을 입력하는 과정에서 보안문제가 발생하는 부분인건가요?
" 간단하게 <script>alert('hi');</script> 이라는 코드를 여러분들이 지금 읽고 있는 것처럼 코드로 안보이고 이것이 실행되면, 저 코드는 보이지 않고 경고 메세지가 뜨는것이죠.
이를 활용해서 XE내부 함수를 실행하여 회원관리자 권한 탈취등 보안점에 문제가 생기게 되는것입니다....."
일반회원이 해당 변수에 xe 내부 함수 실행할 수 있는 코드를 집어넣어 보안 문제가 발생하는 것으로 이해가 되는데요. 해당 변수에 값을 입력할 수 있도록 권한을 준다면 {htmlspecialchars($변수 -> xxx()} 대신에 {($변수 -> xxx()} 형태로 코드를 변경해서 사용을 해도 무방할까요?
{escape(변수, false)} 이렇게 escape false를 사용하면 이미 인코딩되어 있는지 확인한 후 필요한 부분만 인코딩하기 때문에, 보안을 챙기면서도 이중 인코딩 문제를 피할 수 있습니다.
템플릿 맨 위에 <config autoescape="on" /> 설정을 추가하여 모든 변수를 일괄 처리하면 더 편리하고요.