컨트롤러에서 GET 과 POST 값을 동시에 사용할 수 없을까요?
CMS/프레임워크 | Rhymix 1.9 |
---|---|
개발 언어 | PHP 7.0 |
현재 모 서비스와 연동을 위해 모듈을 제작중에 있습니다.
콜백 URL 을 지정하여야 하는 서비스라,
https://example.com/?module=example&act=procExampleCallback 으로 콜백 URL을 지정하였는데...!
문제가 생겼습니다. 해당 서비스에서는 POST 로만 값을 넘겨주고 있습니다.
그러니까, 서비스에서 반환하는 데이터는 POST 로 전달되는데,
정작 콜백 URL 에서 module, act 패러미터는 GET 으로 전달되어서 인식을 하지 못하고 있습니다.
module.xml 에서 GET과 POST 모두를 허용하도록 처리해 두었으나, 이 부분이 문제가 아닌것 같네요.
간단하게나마 코어의 코드를 읽어보니 POST 로 요청이 들어오면, GET 변수를 모두 무시하는 것 같은데요.
(적어도 module, act, mid 와 같은 값들은요.)
이 부분을 혼용하여 사용할 수 있는 방법이 없을까요?
댓글 8
받은 값들을 GET 으로 다시 전달하도록 처리했습니다.
문제가 없지는 않을것 같은데ㅠㅠ 좋은 방법 없을까요..?
예전에 <img 태그를 이용한 로그아웃 관련 보안이슈가 공홈에 있었던 것 기억나시죠?
CSRF 보안 이슈상에서는 두가지는 무조건 구분해서 요청 받아야하고 get에서는 되도록이면 테스트용도가 아니면 DB인풋이나 로그인권한을 주는등등의 작업을 하는 것들을 절대적으로 하시면 안됩니다.
POST 로 전달할 수 있는 방법을 찾아보아야 겠네요.
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 값을 자동으로 인식할 예정입니다.
2, 3. 그렇겠죠ㅠㅠ 지원을 하지 않으니 문제구요..
3. 네, POST 로 전달하는 방법을 찾아보거나 해야겠네요. csrf 문제도 있을것 같은데..!ㅠㅠ
4. 기대하겠습니다...!
별도 스크립트로 POST 요청을 받아서
<?php
$_POST['module'] = $_REQUEST['module'] = 'example';
$_POST['act'] = $_REQUEST['act'] = 'procExampleCallback';
include '라이믹스/설치경로/index.php';
이런 식으로 최소한의 변수만 세팅하고 라이믹스로 넘겨주는 방식을 추천합니다.
나머지 실행 과정은 100% 그대로 진행되겠지요.
그렇게 하자면 Context도 불러와야 하고 모듈 인스턴스도 생성해야 하고
index.php의 소스를 거의 다 복붙하는 꼴이 되어 코드가 오히려 더 복잡해지지요. ㅎㅎ