1

YouTube、Facebook、その他の多くの Web サイトにアクセスできないなど、多くの制限があるプロキシがあります。これらは会社のポリシーです。

しかし、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>  

このコードがプロキシ ポリシーを無視してサイトを処理する方法を理解したいのですが。制限なくすべてにアクセスできます。誰かが「舞台裏」の概念を説明できますか?

4

1 に答える 1

2

PHP はサーバーサイドのスクリプト言語です。

したがって、ブラウザーによって実行される HTML/CSS/JS とは異なり、PHP は最初にサーバーによって解釈され、スクリプトの実行後の結果のみがコンピューター/ブラウザーに送信されます。

これは、PHP スクリプトが存在するサーバー上で file_get_contents が実行されることを意味します。その PHP ファイルがホストされているサーバーが会社のプロキシの背後にない場合、プロキシは影響しません。

事実上、これは、サーバーがアクセスしようとしている Web ページを最初にダウンロードし、その結果をスクリプトのページに入れることを意味します。ブラウザ/コンピュータが実際に $url ページにアクセスすることはなく、サーバーのみがアクセスします。

例: Youtube.com

  • 通常: プロキシは、コンピューター/ブラウザーが Youtube.com にアクセスしようとしているのを確認し、アクセスを許可しません。
  • PHP を介して別のサーバーにロード: サーバー ホスティング スクリプトは、会社以外の場所で youtube.com をダウンロードし、サーバーはスクリプトのページを介してデータを送信します。お使いのブラウザ/コンピュータは youtube.com にアクセスせず、外部サーバーのみがアクセスし、プロキシは youtube.com を認識しません

編集: したがって、PHP の代わりに HTML フレーム/iframe が使用された場合でも、HTML はサーバー側のスクリプト言語ではないため、プロキシはアクセスを拒否します。HTML はブラウザに何をすべきかを伝え、PHP はコンピュータ/ブラウザにアクセスさせる前にサーバーに何をすべきかを伝えます。HTML を使用してページをロードする場合、PROXY はロード URL 要求を認識します。PHP を使用する場合、PROXY は PHP ページ URL のみを認識します。

于 2013-12-19T19:06:20.270 に答える