2013-12-19 1 views
1

다음과 같은 많은 제한 사항이있는 프록시가 있습니다. YouTube, Facebook 및 기타 웹 사이트에 액세스 할 수없는 회사 정책입니다. 프록시가 PHP에서 file_get_contents를 사용하여 액세스를 거부하지 않는 이유를 이해하십시오.

그러나 PHP의 코드를 테스트

는 나는이를 사용하는 사이트에 액세스 할 수 있다는 것을 발견 :

<!doctype html> 
<html lang="en"> 
    <head> 
     <meta charset="utf-8"> 
     <title>Web Proxy</title> 
    </head> 
    <body> 
     <div style="text-align:center;"> 
      <form method="GET" action="<?=$_SERVER['REQUEST_URI']?>"> 
       <input type="url" name="url" placeholder="Type URL of site"/><input type="submit" Value="Load url" /> 
      </form> 
     </div> 
     <hr/> 
     <?php 
      $url = $_GET['url']; 
      if (!empty($url)) 
      { 
       // check we're only getting files served by a website (i.e. not ../../../passwords.txt from this server etc.) 
       if(preg_match('/^https?:/i', $url)) 
       { 
        $contents = file_get_contents($url); 
        if($contents === FALSE) 
        { 
         echo "<h2>Sorry <pre>{$url}</pre> cannot be read</h2>\n"; 
        } 
        //display contents of url 
        else 
        { ?> 
         <?=$contents?> 
         <script>for (var i=0; i<document.links.length; i++) document.links[i].href="<?=$_SERVER['PHP_SELF']?>?url="+document.links[i].href;</script> 
        <?php } 
       } 
       else 
       { 
        echo "<h2><pre>$url</pre> is an invalid URL</h2>\n"; 
       } 
      } 
     ?> 
    </body> 
</html> 

이 코드는 프록시 정책을 무시하고 어떤 사이트를 처리 할 수있는 방법을 난 그냥 싶어 이해? 제한없이 모든 것을 액세스 할 수 있습니다. 누군가가 나에게 "뒤에서"라는 개념을 설명 할 수 있습니까?

+0

어디에서이 코드를 실행하고 있습니까? 브라우저에서 프록시가 실행되었다고해서 브라우저가 아니거나 프록시 요구 사항이 적용되는 곳에서 실행될 수 없다는 것을 의미하지는 않습니다. –

+0

글쎄,이 코드는 다른 브라우저 (youtube, facebook ...)를 테스트 할 때 사용하는 것과 동일한 브라우저 인 브라우저 (google chrome)에서 실행 중이다. – Shelly

+0

아니요. 크롬을 사용하여 웹 서버의 웹 페이지에 액세스하고 있습니다. PHP 코드가 해당 서버에서 실행 중입니다. –

답변

2

PHP는 서버 측 스크립팅 언어입니다.

브라우저에서 실행되는 HTML/CSS/JS와 달리 PHP는 먼저 서버에서 해석 한 다음 스크립트 실행 후 결과 만 컴퓨터/브라우저로 보냅니다.

즉 PHP 스크립트가있는 서버에서 file_get_contents가 실행 중임을 의미합니다. 해당 PHP 파일이 호스팅되는 서버가 회사 프록시의 뒤에 있지 않은 경우 프록시는 프록시 서버에 영향을 미치지 않습니다.

사실상 서버는 액세스하려는 웹 페이지를 먼저 다운로드 한 다음 그 결과를 스크립트 페이지에 저장합니다. 브라우저/컴퓨터는 실제로 $ url 페이지에 액세스하지 않으며 서버 만이 액세스합니다.

예 : 일반적으로

  • Youtube.com

    는 : 프록시 컴퓨터/브라우저가 Youtube.com에 액세스하려고보고는
  • 는 별도의 서버에 PHP를 통해로드에 액세스 할 수 없습니다 : 서버 어딘가에 외부 스크립트를 호스팅 회사에서 youtube.com을 다운로드하면 서버가 스크립트 페이지를 통해 데이터를 보냅니다. 브라우저/컴퓨터 youtube.com는 외부 서버, 프록시가 youtube.com가 표시되지 않습니다 않는 액세스하지

편집 : 그래서 HTML 프레임/iframe이는 PHP 대신에 사용한다면 다음 프록시는 여전히 액세스를 거부 할 HTML은 서버 측 스크립팅 언어가 아닙니다. HTML은 브라우저에게 무엇을해야하는지 알려주며, PHP는 컴퓨터/브라우저가 서버에 접근하도록하기 전에 서버가 무엇을해야하는지 알려줍니다. HTML을 사용하여 페이지를로드 할 때 PROXY에로드 URL 요청이 표시되면 PHP를 사용할 때 PROXY는 PHP 페이지 URL 만 표시합니다.

+0

그럼 왜 페이지를로드하려고 할 때 :