보안상 문제가 있을가요?

라이믹스와 호환되게끔만 해서

여러 오류들 싹다 고쳐서 쓰고있는데

아무래도 13년전 자료다보니 보안문제가 있지는 않을까 걱정이 됩니다.

https://xe1.xpressengine.com/index.php?mid=download&package_id=18324191

https://xe1.xpressengine.com/index.php?mid=download&package_id=18334938

 

https://dpnw.site/pointqna

https://dpnw.site/resources

  • profile
    input 을 전달하는 곳에서 escape 만 잘 해주시면 됩니다.

    2중으로 escape 하는 경우를 방지하기 위해 escape($변수명, false); 으로 잘 보내주시면 됩니다.

    해당 갑들을 불러오는 과정이나 입력하는 과정에서 escape 만 잘해주면 xss 보안취약점정도는 거뜬할거예요
  • profile profile
    어... 죄송합니다만 조금만더 자세히 설명 부탁드려도 될까요? ㅎㅎ
  • profile profile

    코어에서 제공하는 함수 이외 임의로 쿼리를 한다던가 하는 이상한 개조를 하신게 아닌이상 신경쓰실필요 없습니다. 이중 이스케이프도 보기에 안좋거나 오동작 가능성이 생길뿐 보안과 무관합니다.

  • profile profile

    라이믹스에 맞추면서 코드를 바꾸셨을때 escape 으로 해당 값들을 PHP에서 받을때 잘 처리해주신다면 출력하실때 xss관련 보안취약점을 해결하실 수 잇거든요..

    https://github.com/rhymix/rhymix/blob/master/modules/document/document.controller.php#L882
    https://github.com/rhymix/rhymix/blob/master/modules/document/document.controller.php#L483

    이런식으로 사용하는 방식인데, input으로 입력해서 받아오는 form 요청에서 타이틀 혹은 html 이 적용되면 안되는 항목들에서 이렇게 선언해주시면 되긴해요.

    윗분 말씀대로 이중이스케이프가 문제가 될 수 있을 요인은 되겠지만, 11년전 자료에서 그냥 요청하는 자료들도 많은 상황이라 한번 이 케이스를 쓰지 않는지 채크해볼 필요는 있어서 댓글을 달긴했습니다.

    지식인 기준으로 https://github.com/xpressengine/xe-module-kin/blob/master/kin.controller.php#L26 이런쪽에 만약 javascript실행 코드를 넣게되면 xss 보안이슈 당첨되는거거든요..

     

    escape에 두번째 인수에 false만 잘 넣어준다면 이중으로 이스케이프는 안할거예요. 이미 이스케이프된 항목이라면 넘어가게 됩니다.

  • profile
    자료가 얼마나 오래됐는지는 상관없습니다. 중요한건 동작을 위해 어떻게 수정하셨냐입니다.

    라이믹스에는 XE에는 없는 보안기능이 있습니다. 그중 대표적인것이 CSRF 토큰입니다.
    XE는 CSRF 체크를 위해 리퍼러만 활용했습니다. 리퍼러가 사이트의 기본 도메인과 다르면 오류처리하는것이죠. 하지만 라이믹스는 리퍼러 대신 매 요청시마다 임의 생성되는 CSRF 토큰을 사용합니다.

    예를 들어 템플릿에 폼 태그 형태로 사용시 라이믹스가 알아서 토큰 input을 생성해줘서 문제가 없지만 스크립트로 따로 요청한다면(exec_json 같은 함수를 두고 따로 구현한다는것 자체가 문제이긴 합니다만) 요청시 오류가 발생할수 있습니다.

    이경우 문제를 해결하기 위해 다음 방법을 사용할수 있습니다.

    1. 자체 구현된 함수를 exec_json 같은 코어 내장함수로 교체
    2. 자체 구현된 함수에 csrf 토큰 전송 기능 구현
    3. 해당하는 act의 csrf 검증 비활성화

    1번이 정석이지만 수정할 부분도 제일 많습니다. 구현 방식에 따라 반환값이 내장함수와 달라질수 있으니까요. 2번은 권장되지 않는 방법이지만 어쨌건 보안을 크게 해치지는 않습니다. 문제는 3번같은 방식입니다. 보안기능 때문에 동작하지 않는다고 보안을 꺼버리는건 도어락 지문인식이 안된다고 도어락을 떼버리는 것과 같습니다. 바보짓이죠?

    ==================

    마찬가지로, 직접 하셨다는 수정이 1번이나 2번 같은 방식이라면 기존 자료에 문제가 있던게 아닌이상 앞으로도 보안문제가 생길 가능성은 낮습니다. 하지만 3번 같은 방식으로 수정하신것이라면 문제의 소지가 있습니다. 보안기능을 빼버린 것이니 문제가 생길수 있는것이죠.
  • profile
    친절하고 자세한 답변 정말 감사드립니다~
    제가 수정한건
    Object -> BaseObject
    $args = new stdClass;

    이정도긴 하지만 해당 보안 문제점 한번씩 검토해볼 필요가 있을거같네요
    감사합니다!