ASP,PHP与
2018-09-06 10:07
  HTTP-REFERER这个变量已经越来越不可靠了,完全就是可以伪造出来的东东。 
以下是伪造方法: 
ASP: 
复制代码 代码如下:
dimhttp 
sethttp=server.createobject(MSXML2.XMLHTTP)//MSXML2.serverXMLHTTP也可以 
Http.openGET,url,false 
Http.setRequestHeaderReferer,
Http.send()
PHP(前提是装了curl): 
复制代码 代码如下:
$ch=curl_init(); 
curl_setopt($ch,CURLOPT_URL,
curl_setopt($ch,CURLOPT_REFERER,
curl_exec($ch); 
curl_close($ch);
PHP(不装curl用sock) 
复制代码 代码如下:
$server=
$host=
$target=/xxx.asp; 
$referer=
$port=80; 
$fp=fsockopen($server,$port,$errno,$errstr,30); 
if(!$fp) 
{ 
echo$errstr($errno)<br/>\n; 
} 
else 
{ 
$out=GET$targetHTTP/1.1\r\n; 
$out.=Host:$host\r\n; 
$out.=Cookie:ASPSESSIONIDSQTBQSDA=DFCAPKLBBFICDAFMHNKIGKEG\r\n; 
$out.=Referer:$referer\r\n; 
$out.=Connection:Close\r\n\r\n; 
fwrite($fp,$out); 
while(!feof($fp)) 
{ 
echofgets($fp,128); 
} 
fclose($fp); 
}
复制代码 代码如下:
DimoXMLHttpAsMSXML2.XMLHTTP30=NewMSXML2.XMLHTTP30() 
或者 
MSXML2.XMLHTTP30oXMLHttp=newMSXML2.XMLHTTP30(); 
oXMLHttp.open(.... 
oXMLHttp.setRequestHeader(... 
oXMLHttp.send(..
javascript 
xmlHttp.setRequestHeader(Referer,呵呵~假的~ 
JS不支持^_^ 
原理都是sock构造http头来senddata。其他语言什么的比如perl也可以, 
目前比较简单的防御伪造referer的方法是用验证码(Session)。 
现在有一些能防盗链软件的商业公司比如UUDOG,linkgate,VirtualWall什么的,都是开发的应用于IIS上面的dll。 
有的是采用cookies验证、线程控制,有的是能随机生成文件名然后做URL重写。有的方法能的确达到不错的效果. 
不过道高一尺,魔高一丈,这些雕虫小技终归是有破解方法的。 
下一篇:用密码保护页面 (I)