使用php伪造referer的方法 利用referer防止图片盗链 |
本文标签:伪造referer,图片盗链 什么是HTTP Referer 复制代码 代码如下: 15.1.3 Encoding Sensitive Information in URIs Clients SHOULD NOT include a Referer header field in a (non-secure) 这样是出于安全的考虑,访问非加密页时,如果来源是加密页,客户端不发送Referer,IE一直都是这样实现的,Firefox浏览器也不例外 。但这并不影响从加密页到加密页的访问 。 复制代码 代码如下: <FilesMatch ".(gif|jpg)"> Order Allow,Deny Allow from env=local_ref </FilesMatch> 或者 复制代码 代码如下: <Directory /web/images> Order Deny,Allow Deny from all Allow from env=local_ref </Directory> 不要使用Rerferer的地方 不要把Rerferer用在身份验证或者其他非常重要的检查上,因为Rerferer非常容易在客户端被改变,不管是通过上面介绍的Firefox扩展,或者是Privoxy,甚至是libcurl的调用,所以Rerferer数据非常之不可信 。 如果你想限制用户必须从某个入口页面访问的话,与其使用Referer,不如使用session,在入口页面写入session,然后在其他页面检查,如果用户没有访问过入口页面,那么对应的session就不存在,参见这里的讨论 。不过和上面说的一样,也不要过于相信这种方式的“验证”结果 。 个人感觉现在Rerferer除了用在防盗链,其他用途最多的就是访问统计,比如统计用户都是从哪里的链接访问过来的等等 。 ![]() HTTP-REFERER这个变量已经越来越不可靠了,完全就是可以伪造出来的东东 。 PHP(前提是装了curl): 复制代码 代码如下: $ch = curl_init(); curl_setopt ($ch, CURLOPT_URL, "http://www.d.cn/xxx.asp"); curl_setopt ($ch, CURLOPT_REFERER, "http://www.d.cn/"); curl_exec ($ch); curl_close ($ch); PHP(不装curl用sock) $server = www.dc9.cn; $host = www.dc9.cn; $target = /xxx.asp; $referer = http://www.d.cn/; // Referer $port = 80; $fp = fsockopen($server, $port, $errno, $errstr, 30); if (!$fp) { echo "$errstr ($errno)<br />\n"; } else { $out = "GET $target HTTP/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)) { echo fgets($fp, 128); } fclose($fp); } javascript JS不支持^_^ |