1. ホーム
  2. Web プログラミング
  3. セキュリティ関連

ASP、PHP、.NETのHTTP-REFERERの偽造方法と偽造REFERERを防止するための方法

2022-01-02 06:32:05
 HTTP-REFERER変数は信頼性が低くなってきており、偽造が可能なものである。
ここでは、そのごまかし方について説明します。
ASP/Visual Basicのコード
dim http     
set http=server.createobject("MSXML2.XMLHTTP") '//MSXML2.serverXMLHTTP も動作する。    
Http.open "GET",url,falseを実行します。     
Http.setRequestHeader "Referer","http://www.dc9.cn/"。     
Http.send()    
PHP (curlがインストールされていることが条件)。
PHPコード
$ch = curl_init()。    
curl_setopt ($ch, CURLOPT_URL, "http://www.dc9.cn/xxx.asp")。    
curl_setopt ($ch, CURLOPT_REFERER, "http://www.dc9.cn/")。    
curl_exec ($ch)を実行します。    
curl_close ($ch)を実行します。   
PHP (sockでcurlを使用しない場合)
PHPコード
$server = 'www.dc9.cn'。    
$host = 'www.dc9.cn'。    
$target = '/xxx.asp';    
$referer = 'http://www.dc9.cn/'; // リファラー    
$port = 80;    
$fp = fsockopen($server, $port, $errno, $errstr, 30);    
if (! $fp)     
{    
   echo "$errstr ($errno)<br />\n";    
}     
さもなければ     
{    
        $out = "GET $target HTTP/1.1 ###n";    
        $out . = "ホスト: $hostrăn";    
        $out . = "クッキー。ASPSESSIONIDSQTBQSDA=DFCAPKLBBFICDAFMHNKIGKEGrèsn";    
        $out . = "リファラー: $refererrkn";    
        $out . = "接続。ClosernApps";    
        fwrite($fp, $out);    
        while (!feof($fp))     
        {    
                echo fgets($fp, 128);    
        }    
        fclose($fp);    
}    
VB.NET/C#.NET
C#コード
Dim oXMLHttp As MSXML2.XMLHTTP30 = New MSXML2.XMLHTTP30()    
または    
MSXML2.XMLHTTP30 oXMLHttp = new MSXML2.XMLHTTP30();    
oXMLHttp.open(...)。    
oXMLHttp.setRequestHeader(...)。    
oXMLHttp.send(...)。   
ジャバスクリプト
JavaScriptコード
xmlHttp.setRequestHeader("Referer", "http://URL");//? おぉ~~~~~~~~~~~~~~~~~~~~~~~~~~い    
JSはサポートされていません^_^。   
sockはhttpヘッダを構築してデータを送信するのが原則です。他の言語やperlのようなものを使用することもできます。
クッキー認証やスレッド制御を利用したもの、ランダムなファイル名を生成してURLの書き換えを行うことができるものなどがあるようです。これらの方法の中には、良い結果を得られるものもあります。
魔法がかかっているようなものです。