테스트 사이트 - 개발 중인 베타 버전입니다

영카트 "url에 타 도메인을 지정할 수 없습니다." 문의 입니다! 채택완료

림미노닷컴 1년 전 조회 2,153

영카트 5.4.5.5.1 버전 사용 중 입니다. 

PG는 이니시스 MID 받아서 실결제 적용 중 입니다.

 

모바일로 결제 시 "url에 타 도메인을 지정할 수 없습니다." 오류가 뜹니다.

 

이것저것 찾아보면서 현재 아래와 같은 상태 입니다.

제 도메인은 임의로 store.domain.com 이라고 하겠습니다. 

 

/config.php

</p>

<p>define('G5_DOMAIN', '<a href="https://store.domain.com');" target="_blank" rel="noopener noreferrer">https://store.domain.com');</a>

define('G5_HTTPS_DOMAIN','<a href="https://store.domain.com');" target="_blank" rel="noopener noreferrer">https://store.domain.com');</a></p>

<p>

가상서버 호스팅 받고 있어서 우분투 22.04 + PHP8.1.2 + Let's Encrypt 환경 입니다.

 

/lib/common.lib.php

</p>

<p>function check_url_host($url, $msg='', $return_url=G5_URL, $is_redirect=false)

{

    if(!$msg)

        $msg = 'url에 타 도메인을 지정할 수 없습니다.';</p>

<p>    $p = @parse_url($url);

    $host = preg_replace('/:[0-9]+$/', '', $_SERVER['HTTP_HOST']);

    $is_host_check = false;

    

    // url을 urlencode 를 2번이상하면 parse_url 에서 scheme와 host 값을 가져올수 없는 취약점이 존재함

    if ( $is_redirect && !isset($p['host']) && urldecode($url) != $url ){

        $i = 0;

        while($i <= 3){

            $url = urldecode($url);

            if( urldecode($url) == $url ) break;

            $i++;

        }</p>

<p>        if( urldecode($url) == $url ){

            $p = @parse_url($url);

        } else {

            $is_host_check = true;

        }

    }</p>

<p>    if(stripos($url, 'http:') !== false) {

        if(!isset($p['scheme']) || !$p['scheme'] || !isset($p['host']) || !$p['host'])

            alert('url 정보가 올바르지 않습니다.', $return_url);

    }</p>

<p>    //php 5.6.29 이하 버전에서는 parse_url 버그가 존재함

    //php 7.0.1 ~ 7.0.5 버전에서는 parse_url 버그가 존재함

    if ( $is_redirect && (isset($p['host']) && $p['host']) ) {

        $bool_ch = false;

        foreach( array('user','host') as $key) {

            if ( isset( $p[ $key ] ) && strpbrk( $p[ $key ], ':/?#@' ) ) {

                $bool_ch = true;

            }

        }

        if( $bool_ch ){

            $regex = '/https?\:\/\/'.$host.'/i';

            if( ! preg_match($regex, $url) ){

                $is_host_check = true;

            }

        }

    }</p>

<p>

    if ((isset($p['scheme']) && $p['scheme']) || (isset($p['host']) && $p['host']) || $is_host_check) {

        //if ($p['host'].(isset($p['port']) ? ':'.$p['port'] : '') != $_SERVER['HTTP_HOST']) {

        if ( ($p['host'] != $host) || $is_host_check ) {

            echo '<script>'.PHP_EOL;

            echo 'alert("url에 타 도메인을 지정할 수 없습니다.");'.PHP_EOL;

            echo 'document.location.href = "'.$return_url.'";'.PHP_EOL;

            echo '</script>'.PHP_EOL;

            echo '<noscript>'.PHP_EOL;

            echo '<p>'.$msg.'</p>'.PHP_EOL;

            echo '<p><a href="'.$return_url.'">돌아가기</a></p>'.PHP_EOL;

            echo '</noscript>'.PHP_EOL;

            exit;

        }

    }

}</p>

<p>

위 check_url_host() 함수에서 오류가 출력되는 것 같아서, 함수 내부에 $url과 $host를 각각 echo 해봤더니 아래와 같이 나왔습니다.

 

$url = fcmobile.inicis.com

$host = store.domain.com

 

$url과 $host가 다른게 희안하기도 하고.. 어떻게하면 해결이 될런지요 ㅠ

 

고수님들의 아해와 같은 도움 부탁드리옵니다!

 

 

 

댓글을 작성하려면 로그인이 필요합니다.

답변 2개

채택된 답변
+20 포인트
define('G5_DOMAIN', 'https://store.domain.com'); 

이부분은 주소 빼서도 됩니다

아마 둘다 주소를 올려서 나오는 현상 같습니다

로그인 후 평가할 수 있습니다

답변에 대한 댓글 3개

림미노닷컴
1년 전
답변 감사합니다!

그런데 말씀해주신대로 G5_DOMAIN을 공백처리 했더니 <script> <link> 등 주소가 모두 서버 절대경로로 뜹니다 ㅠㅠ

제가 설치를 잘못한 걸까요 ㅠ
리오닥터
1년 전
아니면 https:// 이걸 s 빼서 넣어보세요 도메인에서 s를 빼보세요
림미노닷컴
1년 전
엇! 됩니다!
소스코드 문제가 아니라 이니시스 쪽에서 사용 설정을 안해줬어서 그런 것 같습니다.
그래도 답변 감사합니다!

댓글을 작성하려면 로그인이 필요합니다.

buzz
1년 전

혹시 어떻게 해결하셨는지 여쭤봐도될까요

로그인 후 평가할 수 있습니다

댓글을 작성하려면 로그인이 필요합니다.

답변을 작성하려면 로그인이 필요합니다.

로그인