질문/조언질답게시판
Extra Form
PHP PHP 7.0
CMS Rhymix

현재 모 서비스와 연동을 위해 모듈을 제작중에 있습니다.

 

콜백 URL 을 지정하여야 하는 서비스라,

https://example.com/?module=example&act=procExampleCallback 으로 콜백 URL을 지정하였는데...!

 

문제가 생겼습니다. 해당 서비스에서는 POST 로만 값을 넘겨주고 있습니다.

그러니까, 서비스에서 반환하는 데이터는 POST 로 전달되는데,

정작 콜백 URL 에서 module, act 패러미터는 GET 으로 전달되어서 인식을 하지 못하고 있습니다.

 

module.xml 에서 GET과 POST 모두를 허용하도록 처리해 두었으나, 이 부분이 문제가 아닌것 같네요.

간단하게나마 코어의 코드를 읽어보니 POST 로 요청이 들어오면, GET 변수를 모두 무시하는 것 같은데요.

(적어도 module, act, mid 와 같은 값들은요.)

 

이 부분을 혼용하여 사용할 수 있는 방법이 없을까요?

  • profile
    일단 요청을 처리할 페이지를 따로 빼서,
    받은 값들을 GET 으로 다시 전달하도록 처리했습니다.
    문제가 없지는 않을것 같은데ㅠㅠ 좋은 방법 없을까요..?
  • profile profile
    Post로 처리해야할 것들을 GET으로 처리하다보면 심각한 보안 이슈에 들어가기 마련입니다.

    예전에 <img 태그를 이용한 로그아웃 관련 보안이슈가 공홈에 있었던 것 기억나시죠?

    CSRF 보안 이슈상에서는 두가지는 무조건 구분해서 요청 받아야하고 get에서는 되도록이면 테스트용도가 아니면 DB인풋이나 로그인권한을 주는등등의 작업을 하는 것들을 절대적으로 하시면 안됩니다.
  • profile profile
    네, 일단 직접적인 DB 인풋 등의 내용이 없기 때문에 (전달받은 값은 토큰값이라, 다시 서비스측에 실제 정보를 요청 해야만 함) 임시방편으로 쓸 정도는 되는것 같은데요ㅠ
    POST 로 전달할 수 있는 방법을 찾아보아야 겠네요.
  • profile

    1. POST 요청이라면 URL에 추가된 값들은 그냥 URL의 일부일 뿐, GET으로 전달된 것이 아닙니다. POST != GET 이므로 POST 요청에서 GET으로 전달된다는 것 자체가 말이 안 되지요.

    2. 콜백 서비스에서 module, act 값도 함께 넣어주도록 하는 방법이 가장 깔끔합니다.

    3. 콜백 서비스에서 추가 파라미터 전달을 지원하지 않는다면 별도의 스크립트로 받아서 변수들을 정리한 후 다시 전달하는 방법이 지금으로서는 최선입니다. 이 과정을 POST로 처리한다면 보안상 문제는 없습니다.

    4. 라이믹스 2.0에서는 https://example.com/example/procExampleCallback URL로 POST 요청이 들어오면 module, act 값을 자동으로 인식할 예정입니다.

  • profile profile
    1. 네네, 이 부분은 이해하고 있습니다. 단지 설명을 간단하게 하기 위해서 PHP 변수명을 따 채용한 것 뿐입니다 :)
    2, 3. 그렇겠죠ㅠㅠ 지원을 하지 않으니 문제구요..
    3. 네, POST 로 전달하는 방법을 찾아보거나 해야겠네요. csrf 문제도 있을것 같은데..!ㅠㅠ
    4. 기대하겠습니다...!
  • profile profile

    별도 스크립트로 POST 요청을 받아서

    <?php
    $_POST['module'] = $_REQUEST['module'] = 'example';
    $_POST['act'] = $_REQUEST['act'] = 'procExampleCallback';
    include '라이믹스/설치경로/index.php';

    이런 식으로 최소한의 변수만 세팅하고 라이믹스로 넘겨주는 방식을 추천합니다.

    나머지 실행 과정은 100% 그대로 진행되겠지요.

  • profile profile
    아하..? 아예 procExampleCallback 함수를 바로 호출하는 방법도 있겠네요. 말씀주신 방식이 더 간단해 보이기는 합니다만..ㅋㅋㅋ
  • profile profile

    그렇게 하자면 Context도 불러와야 하고 모듈 인스턴스도 생성해야 하고

    index.php의 소스를 거의 다 복붙하는 꼴이 되어 코드가 오히려 더 복잡해지지요. ㅎㅎ