amina 권한없는 페이지 백지 오류

돌아다니면서 구한 자료로 공부하는 공간입니다..

틀린부분이 있다면 말씀해주시면 수정하도록 하겠습니다.

※ 남을 비방하거나 욕 / 정치적인 글은 삭제 대상이 됩니다. ※

amina 권한없는 페이지 백지 오류

만키로군 0 597 0

Breadcrumbs

  1. gnuboard5
  2. /lib
/

common.lib.php


아래 내용 찾아서 수정

// 동일한 host url 인지

function check_url_host($url, $msg='', $return_url=G5_URL, $is_redirect=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;

            }

        }

    }

0 Comments
제목