2013-07-24 1 views
1

그래서 난 문제는이 코드가는 PHP에 의해 하위 도메인

여기까지 코딩 한 안전한 데이터베이스에 대한 검증 PHP 코딩하려고 폭발 제거하려고하면 하위 도메인으로의 링크를 확인합니다

같은

unsafeurl = http://remove.facebook.com/anything //it works (Shows Valid) 
경우

unsafeurl = http://facebook.com/anything //not works (Shows invalid because of $da in place of $do ... i have explode (.) here) 

그래서, 내가 마지막 줄 와트에서 stucked입니다 경우

는하지만이 작동하지 않습니다 할 .. pls는 저

<?php 

     $url=$_POST['unsafeurl']; 

     $safeurl = "facebook"; 


     $front = explode("/", $url); 
     $host = $front[2]; 

     $domain = explode(".com", $front[2]); 
     $do = $domain[0]; 

     $domain = explode(".", $url); 
     $da = $domain[1]; 

     echo $da; 
     echo "<br />"; 

    if($da==$safeurl) { 

     echo "valid"; 

    } 
    else 
    { 
     echo "invalid";   
    } 

    ?> 
+0

jh314 편집 해 주셔서 감사합니다 – user2615947

+0

이 페이지는 어떻게 유효한'http : // remove.stackoverflow.com/questions/ask'이며 어떻게'facebook'과 비교합니까? –

+0

왜 parse_url()이 있다고 생각합니까? – Twisted1919

답변

2

같은 일을 할 수있는,

$url = $_POST['unsafeurl']; 
$host = parse_url($url, PHP_URL_HOST); 
if (false === $host) { 
    // bad URL 
} else { 
    // get domain with TLD removed 
    $domain_minus_tld = substr($host, 0, strpos($host, '.', -1)); 
} 

:

그래서 당신은 같은 일을 할 수 있습니다

$safeurl = "facebook.com"; 

    # Use parse_url to get host from URL 
    $explode = explode(".", parse_url($url, PHP_URL_HOST)); 

    # Get last two elements of . explode 
    $count = count($explode); 
    $count = $count - 2; 
    $da = $explode[$count]; 
    $count++; 
    $da .= ".".$explode[$count]; 

이 anything.here.facebook에 대한 facebook.com으로 $da를 반환해야합니다. COM

당신이 더 진보가 여러 URL과를 처리 할 수 ​​있도록 확인하려면이 .co.uk에서와 같은 :

$safeurl[] = "facebook.com"; 
    $safeurl[] = "google.co.uk"; 

    # Use parse_url to get host from URL 
    $explode = explode(".", parse_url($url, PHP_URL_HOST)); 


    $valid = 0; 
    foreach($safeurl as $checkurl) { 
    # Get number of elements in safeurl 
    $safecount = count(explode(".", $checkurl)); 

    # Get last $safecount elements of . explode 
    $count = count($explode); 
    $count = $count - $safecount; 
    $da = $explode[$count]; 
    $count++; 
    while ($explode[$count]) { 
    $da .= ".".$explode[$count]; 
    $count++; 
    } 
    if($da==$checkurl) { 
     $valid = 1; 
    } 
    } 
    if ($valid==1) { echo "Valid"; } 

누군가가 확인할 수 있지만, 그 모든 올바른 생각합니다. 나는 그것을 아주 빨리했다.

+0

facebook.com inplaceplace.com의 – user2615947

+0

나의 잘못. 나는 그 기간을 다시 추가하는 것을 잊어 버렸고, 나는 내 대답 ($ da의 마지막 줄)을 편집했다. – Devon

+0

하하 .. 나는 너보다 먼저 그것을 수정했다 : P – user2615947

1

당신은 PHP parse_url() 기능은 당신이 "안전"URL을 고려 무엇을 내게 불분명하지만

을 조사 할 수 있습니다 도움이 (가 .com TLD를해야합니까? 페이스 북 도메인이어야합니까?), 이는 사용자가 검사 할 수 있도록 URL의 호스트 부분을 쉽게 분리합니다. URL이 제대로 형성되지 않으면 단순히 false을 반환합니다. 특별히 이것은 페이스 북의 URL인지 확인하려는 경우 당신은 내가 몇 가지를 바꿀 것

$url_is_facebook = false; 
$url = $_POST['unsafeurl']; 
$host = parse_url($url, PHP_URL_HOST); 
if (false === $host) { 
    // bad URL 
} else { 
    // see if this is facebook 
    $pattern = '/^(www\.)?facebook\.com$/'; 
    if (preg_match($pattern, $host)) { 
     $url_is_facebook = true; 
    } 
} 
+0

감사합니다 마이크! 그것의 작동 :) – user2615947