Extra Form
PHP PHP 5.6
CMS XpressEngine

아래와 같이 했을 때, B.php에서 값을 못 가져옵니다.

코어 1.4.4.4 에서는 되었는데 말이지요...

 

현재는 1.11.5 입니다.

 

<A.php>

function go_modify(frm){

  frm.method='post';
  frm.action='/?mid=BBB
  frm.submit();

}

 

<form method='post'>

<input type='text' name='product_id' id='product_id'>

<input type='button' value='제출' onclick='go(this.form);'>

</form>

 

<B.php / mid값 : BBB>

.....

$product_id = Context::get('product_id');

 

여러 가지를 시도해 본 결과, post로 값을 submit하려면 위와 같이 mid 값으로 호출하면 안되고

php 파일을 절대 경로로 직접 호출하고, B.php 에서 아래와 같이 해야 값을 받을 수 있습니다.

 

<B.php>

.....

$product_id = $_POST['product_id'];

 

문제는 B.php와 같이 직접 호출하면 해당 페이지에 대해 XE 코어에서 권한 관리를 할 수 없고

보완이 취약해 질거 같고 걱정입니다.

 

이러한 증상이 맞는 건지, 보완과 관련하여 걱정은 없는지...

post로 submit할 때 값일 넘기도 받는 또 다른 방법이 있는지.

 

고수님들의 조언 부탁드립니다!

  • profile

    예제 소스에 스크립트 문법 오류와 서로 맞지 않는 함수명 등 잘못된 곳이 너무 많아서 애초에 작동할 리가 없어 보입니다만... 대강 붙여넣느라 그렇게 되었다고 치고...

     

    1. /?mid=BBB 이건 GET 방식입니다. POST라면 일관성있게 POST로 넘기세요.

     

    2. 무의미한 onclick 핸들러는 빼고, 폼을 처음부터 제대로 작성해서 써보세요. onclick 핸들러에서 저렇게 따옴표 짝도 안 맞아서 스크립트 오류 나면 어정쩡한 상태로 제출됩니다.

     

    3. 정상적인 mid를 넘겼다면 받는 쪽이 B.php일 리가 없습니다. BBB.controller.php이거나 뭐 그렇겠죠. 일단 mid라는 것이 관여하는 순간 모듈이 아닌 날코딩 파일로 받는다는 것은 논외가 되어야 하는데, 그걸 고려하고 있다는 사실 자체가 뭔가 설계미스 같습니다. 예전에는 날코딩에 익숙한 분들을 배려하는 차원에서 그냥 넘어갔을지도 모르지만, 너무 많이 봐주다 보니 보안취약점이 발생해서 요즘은 무척 까다로워졌습니다. BBB라는 mid가 실제로 DB상에 존재하고 특정 모듈에 연결되어 있어야 하며, 해당 모듈 controller 파일의 특정 액션(메소드)에서 받아야 합니다.

     

    // 이런 식으로 하면 잘 넘어갑니다.

    <form action="{Context::getRequestUri()}" method="post">

        <input type="hidden" name="mid" value="BBB" />

        <input type="hidden" name="act" value="procBBB어쩌고저쩌고" />

        <input type="text" name="product_id" />

        <input type="button" value="제출" />

    </form>

    // 불필요한 스크립트는 제거