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

비로그인상태에서 바로구매하면 로그인으로 넘어가는데 로그인하면 메인페이지가 나옵니다 채택완료

옃이 4년 전 조회 2,288

보통은 비로그인 상태에서 바로구매 클릭해서 로그인 페이지가 나오고,

로그인을 하면 바로 구매 페이지로 넘어가지 않나요?

그런데 자꾸 그냥 메인페이지로 넘어가네요 ㅜㅜ

우선 cartupdate.php에서는

</p>

<p>// 바로 구매일 경우

if ($sw_direct)

{

    if ($is_member)

    {

        goto_url(G5_SHOP_URL."/orderform.php?sw_direct=$sw_direct");

    }

    else

    {

        goto_url(G5_BBS_URL."/login.php?url=".urlencode(G5_SHOP_URL."/orderform.php?sw_direct=$sw_direct"));

    }

}

else

{

    goto_url(G5_SHOP_URL.'/cart.php');

}</p>

<p>

 

이렇게 되어있어서 login.php로 들어가 url 부분을 보니

 

</p>

<p>

$url = isset($_GET['url']) ? strip_tags($_GET['url']) : '';

$od_id = isset($_POST['od_id']) ? safe_replace_regex($_POST['od_id'], 'od_id') : '';</p>

<p>// url 체크

check_url_host($url);</p>

<p>// 이미 로그인 중이라면

if ($is_member) {

    if ($url)

        goto_url($url);

    else

        goto_url(G5_URL);

}</p>

<p>$login_url        = login_url($url);

$login_action_url = G5_HTTPS_BBS_URL."/login_check.php";</p>

<p>

 

이렇게 되어있습니다 check_url_host 함수는 손댄적이 없는데ㅜㅜ...

 

혹시 몰라 check_url_host 함수도 첨부드립니다

 

</p>

<p>// 동일한 host url 인지

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

{

    //return 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>

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

답변 1개

채택된 답변
+20 포인트
a
4년 전

로그인 현재페이지 머무르기 등으로 검색해보시면 팁들이 많이 있습니다.

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

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

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

로그인