비로그인상태에서 바로구매하면 로그인으로 넘어가는데 로그인하면 메인페이지가 나옵니다
본문
보통은 비로그인 상태에서 바로구매 클릭해서 로그인 페이지가 나오고,
로그인을 하면 바로 구매 페이지로 넘어가지 않나요?
그런데 자꾸 그냥 메인페이지로 넘어가네요 ㅜㅜ
우선 cartupdate.php에서는
// 바로 구매일 경우
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');
}
이렇게 되어있어서 login.php로 들어가 url 부분을 보니
$url = isset($_GET['url']) ? strip_tags($_GET['url']) : '';
$od_id = isset($_POST['od_id']) ? safe_replace_regex($_POST['od_id'], 'od_id') : '';
// url 체크
check_url_host($url);
// 이미 로그인 중이라면
if ($is_member) {
if ($url)
goto_url($url);
else
goto_url(G5_URL);
}
$login_url = login_url($url);
$login_action_url = G5_HTTPS_BBS_URL."/login_check.php";
이렇게 되어있습니다 check_url_host 함수는 손댄적이 없는데ㅜㅜ...
혹시 몰라 check_url_host 함수도 첨부드립니다
// 동일한 host url 인지
function check_url_host($url, $msg='', $return_url=G5_URL, $is_redirect=false)
{
//return false;
if(!$msg)
$msg = 'url에 타 도메인을 지정할 수 없습니다.';
$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++;
}
if( urldecode($url) == $url ){
$p = @parse_url($url);
} else {
$is_host_check = true;
}
}
if(stripos($url, 'http:') !== false) {
if(!isset($p['scheme']) || !$p['scheme'] || !isset($p['host']) || !$p['host'])
alert('url 정보가 올바르지 않습니다.', $return_url);
}
//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;
}
}
}
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;
}
}
}
답변을 작성하시기 전에 로그인 해주세요.