관리자 로그인 이후 

 

헤더 스크립트를 수정후 저장을하니 아래와 같은 에러가 발생합니다.

 

 

 

보안정책상 허용되지 않습니다.

ERR_UNSAFE_VAR

classes/module/ModuleHandler.class.php:1047

 

1047란은 아래와 같습니다. 혹시 어떠한 문제인지 알 수 있을까요?

                // display content with message module instance
                $oMessageObject = self::_createErrorMessage(-1, $this->error, $this->httpStatusCode, $this->error_detail, $oModule->get('rx_error_location'));

 

혹시 원인을 알 수 있을까요?

  • profile

    해결하려고 헤더스크립트내 스크립트 내용과 js를 빼고 저장을 했더니 수정은 되었으나.

    적용해둔 js 파일이다날라가서. 사이트가 비정상 작동중입니다.

    레이아웃설정에서 스크립트를 넣어야 사이트가 작동되는데
    현재는 동일 에러로 js를 넣을 방법이 없는데.. 어떻게 넣어야하나요?

  • profile

    정말임시방편으로 레이아웃 html에 스타일 js 다넣고 초기화 눌러서 급한불은 꺼두었는데
    html 에서도 스크립트가 들어가니 저장이 안되네요.

    보안정책상 허용되지 않습니다.

    ERR_UNSAFE_VAR

    classes/module/ModuleHandler.class.php:1047
    라고 나오고


    실질적으로 레아이웃 편집기능을 사용하지 않아야하는것인지 궁금합니다.
    혹은 인크루드 해야하는건가요??

     

    실질적으고 head 에 불러와야할 css와 js <script>를 지금 body 내에서 불러오고 있는 상태입니다.

     

    aa.png

    헤더 스크립트를 불러오는 곳이 분명 맞는데 왜 js 파일이나 <script>가 안불러 와지는 걸까요?

  • profile
    https://xetown.com/questions/1090769#comment_1090991

    해당 링크에서 개선된다고 보았는데 다시 과거로 돌아간것인지 저와 같은 문제를 겪으시는분이 검색해보니 최근에도 계신 것 같습니다.
  • profile

    <script language="JavaScript" 로 최근 권장되지 않는 방식인

    language를 사용하니 에러가 떳나봅니다.

     


    <script type="text/javascript"

    로 변경하여 해결되었습니다.

  • profile

    레이아웃 편집 기능은 정말정말 불가피한 경우 외에는 사용하지 않는 것을 권장합니다. 관리자라면 당연히 layout.html을 직접 수정할 권한이 있을 테고, 요즘은 에디터를 FTP로 연결해서 아주 쾌적한 환경에서 편집할 수도 있으니 굳이 보안상의 리스크를 짊어지고 불편한 textarea로 수정할 이유도 없지요. 코어에서도 분명히 소스를 편집할 줄 아는 사람에게 어설픈 textarea를 제공할 이유를 모르겠고요.

     

    이미 수정해 버렸다면 수정한 내용을 원본 layout.html에 반영한 후, 편집 내용을 초기화하여 원본 그대로 반영되도록 조치하시기 바랍니다. 이걸 안전하게 일괄적으로 처리할 방법이 있다면 당장이라도 레이아웃 편집 기능을 폐기할 수 있을 텐데, 하위 호환성 때문에 불가피하게 유지하고 있습니다.


    레이아웃 파일을 직접 편집하실 수 있는 경우, 헤더/푸터 스크립트 기능도 사용하지 않는 것을 권장합니다. 관리자 권한으로 웹상에서 자바스크립트를 입력하도록 하는 기능은 근본적으로 위험할 수밖에 없기 떄문에, 언제 어떤 취약점이 발견되어서 지금보다 더 엄격하게 막힐지 모릅니다.

     

    어쩔 수 없이 레이아웃이나 헤더/푸터에 JS를 넣어야 할 경우, <script src="script.js"></script> 까지만 입력하고 실제 JS 코드는 별도의 파일 script.js에 넣는 것을 권장합니다.

  • profile profile

    답변 감사합니다.
    만약 ftp로 레이아웃을 수정한다고 가정하였을때
    레이아웃 layout.html 상에 <head>를 넣는다면 레이아웃편집상에 들어있는 <head>가 있으니
    <head>가 두번 출력되지 않을까요?
    info.xml 에서도 따로 head 관련 설정 내용은 빠져서 있는것으로 확인 됩니다.
    <head>는 내장된 </head> 레이아웃편집 기능말고는 사용할 방법이 없는상태인데 어떻게하면 FTP에서 head 사이 내용을 넣을 수 있을까요?

     

    제가 아주 오래전 제작해왔던 모든 레이아웃은

    info.xml 에는 메뉴를 제외한 다른 설정은 들어가 있지않고 모두다 body 내용만 layout.html에 포함되어 있는 상태입니다.

     

  • profile profile

    <head> 태그 자체를 입력하는 것은 말씀하셨다시피 의미가 없고요...

     

    현실적으로 반드시 <head>에 넣어야 하는 스크립트도 없습니다. <head>든 <body>든 소스상에 등장하는 순서대로 로딩될 뿐, 자바스크립트에서는 <head>를 특별하게 취급하지 않으니까요. 꼭 <head>에 넣어야 한다고 주장하는 스크립트가 있더라도 로딩 순서만 맞춰 주면 상관없을 가능성이 높습니다.

    반드시 <head>에 넣으셔야겠다면
        <load target="파일명.js" type="head" />
    가 XE 시절부터 내려오는 정석입니다.

    도저히 별도의 파일로 분리할 수 없는 내용이라면
        {@ Context::addHtmlHeader('넣을 내용')}
    이라고 쓰셔도 됩니다.

     

    물론 위의 두 가지 모두 일반적인 템플릿 파일에서 사용할 수 있는 문법이고, 헤더스크립트에서는 통하지 않습니다. (사실 헤더스크립트에 넣는다고 해도 <head>에 들어간다는 보장은 없습니다. 레이아웃에서 그 변수를 어떻게 처리하는지에 따라 출력 위치가 달라질 수 있어요.)

  • profile profile
    꼭 <head>에 js 와 스크립트를 넣어야 한다는 고정관념을 버리고 그냥 마음편하게 layout.html 에 포함하여 ftp로 수정하도록 하겠습니다. 감사합니다!