请问一下 Referer 的问题.

新手入门、经验交流

Moderator: cre

Forum rules
  • 软件自带帮助是最好的入门教程,请仔细阅读;在您掌握最基本知识前,我们没法帮助您
  • 提问前请先查阅软件帮助文件和论坛相关讨论
  • 查阅软件帮助和论坛相关讨论即可解决的问题帖将直接删除,以免浪费他人时间
  • 请学会如何提问,尽量将问题描述清楚,不明确的提问将被直接删除
Ray4
Moderator
Posts: 65
Joined: Dec 30 2007, 09:37

Re: 请问一下 Referer 的问题.

Post by Ray4 »

不是大小写的问题,帮助里有提到,head规则的冒号后可以是任意字符,不影响过滤
Unlike web page filters, the header filter's name is very important. It's simply the name of the header you want filtered and, except for case, it must match exactly (sorry no wildcards here). A comment can be added after the colon ":" which will be ignored during filter matching.
仔细看一下,你的$LST是写在url匹配部分,我的是在match部分。自己实验了一下,\u,\h等这些,在url匹配部分赋值给变量是得不到任何结果的
User avatar
cre
Moderator
Posts: 91
Joined: May 26 2009, 00:34

Re: 请问一下 Referer 的问题.

Post by cre »

ray写的跟咱们不一样. 我们在url ray在match.
同样发现cb不行,Referer:出去为空....

为啥不行咧?

Code: Select all

[HTTP headers]
In = FALSE
Out = FALSE
Key = "Referer:  BE Referer (Out)"
URL = "$IHDR(Host: \0)($TST(\0=$LST(Referer)))"
Match = "*"
Replace = "\0"

Code: Select all

[HTTP headers]
In = FALSE
Out = FALSE
Key = "Referer:  BE Referer (Out)"
URL = "$IHDR(Host: \0)($TST(\0=$LST(Referer)))"
Match = "*"
Replace = "\1"
lst写 img.cnbeta.com $SET(1=img.cnbeta.com) 也不行!
如果 Replace = "\1" 写成 1234 调试看到出的是1234....

请问ray4为何写在Match?

PS:官方默认是

Code: Select all

[HTTP headers]
In = FALSE
Out = TRUE
Key = "Referer: Hide where we've been (Out)"
Match = "*"
Replace = "\u"
显然不行....
User avatar
cre
Moderator
Posts: 91
Joined: May 26 2009, 00:34

Re: 请问一下 Referer 的问题.

Post by cre »

Ray4 wrote:不是大小写的问题,帮助里有提到,head规则的冒号后可以是任意字符,不影响过滤
Unlike web page filters, the header filter's name is very important. It's simply the name of the header you want filtered and, except for case, it must match exactly (sorry no wildcards here). A comment can be added after the colon ":" which will be ignored during filter matching.
仔细看一下,你的$LST是写在url匹配部分,我的是在match部分。自己实验了一下,\u,\h等这些,在url匹配部分赋值给变量是得不到任何结果的
看到了ray先生的解答. 也写在match了. 怎么还是图不出来?

调试是
+++GET 34019+++
GET /topics/bill.png HTTP/1.0
User-Agent: User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; Avant Browser)
Host: img.cnbeta.com
Accept: text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/jpeg, image/gif, image/x-xbitmap, */*;q=0.1
Accept-Language: en,zh-CN;q=0.9,zh;q=0.8
Accept-Charset: iso-8859-1, utf-8, utf-16, *;q=0.1
Accept-Encoding: deflate, gzip, x-gzip, identity, *;q=0
Referer: img.cnbeta.com
Pragma: no-cache
Cache-Control: no-cache
Connection: keep-alive

+++GET 34020+++
GET /topics/soft.gif HTTP/1.0
User-Agent: User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; Avant Browser)
Host: img.cnbeta.com
Accept: text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/jpeg, image/gif, image/x-xbitmap, */*;q=0.1
Accept-Language: en,zh-CN;q=0.9,zh;q=0.8
Accept-Charset: iso-8859-1, utf-8, utf-16, *;q=0.1
Accept-Encoding: deflate, gzip, x-gzip, identity, *;q=0
Referer: img.cnbeta.com
Pragma: no-cache
Cache-Control: no-cache
Connection: keep-alive
Match 34006: mouse unlock
规则

Code: Select all

[HTTP headers]
In = FALSE
Out = TRUE
Key = "Referer:  BE Referer (Out)"
Match = "$IHDR(Host: \0)($TST(\0=$LST(Referer)))"
Replace = "\h"|Replace = "\1"[两个都不行]
referer已经是img.cnbeta.com 就是出不来!
Bonnie
Moderator
Posts: 165
Joined: Oct 05 2008, 01:27

Re: 请问一下 Referer 的问题.

Post by Bonnie »


前几天刚问过这个问题. 转眼就忘了.
是应该写在match部分.
URL部分赋值的变量在replace部分无法引用.
User avatar
cre
Moderator
Posts: 91
Joined: May 26 2009, 00:34

Re: 请问一下 Referer 的问题.

Post by cre »

终于搞定了.
正如phoenix所说,
删除 Referer 并不是解决防盗链的灵丹妙药。
但是关于sina,以及绝大多数网站,还是删除比较简单.

1、2、3依次处理。
是什么意思?怎么感觉像"处理了1就不管23了",因为问的是都匹配,还依次处理怎么说呢?哎!
大概是1 替换成1234 2匹配1234时替换2345工作吧.
不管啦.

bon说大写不大写,我是觉得无关,美观起见也大写.
现在还是俩规则,不过不匹配url了,改匹配主机了哈哈哈哈......至今工作良好.

Code: Select all

[HTTP headers]
In = FALSE
Out = TRUE
Key = "Referer:  Special be Referer (Out)"
URL = "$IHDR(Host: \0)($TST(\0=$LST(Referer)))"
Match = "*"
Replace = "\u"

Code: Select all

[HTTP headers]
In = FALSE
Out = TRUE
Key = "Referer:  Default no Referer (Out)"
URL = "$IHDR(Host: ^$LST(Referer))"
Match = "*"

发现不能盗链的图片log下看看,把主机名添加到列表就行了.列表不用set来set去啦....嘿嘿.
列表
img.cnbeta.com
uushare.com
就这俩.简单吧.
Ray4
Moderator
Posts: 65
Joined: Dec 30 2007, 09:37

Re: 请问一下 Referer 的问题.

Post by Ray4 »

@why
你在一开始提到的规则

Code: Select all

    [HTTP headers]
    In = FALSE
    Out = TRUE
    Key = "Referer: All del out"
    URL = "\w.(jpg|gif|png)"
    Match = "*"
这个本身就有问题,因为新浪图片的地址不是以.(jpg|gif|png)结尾的,所以此规则无法捕捉到它们,修改referer无从谈起

以你举的新浪的例子来说明
我的规则里主要是用;$LST(referer)来检查,新浪的图片匹配了这一条

Code: Select all

$URL(http://static[0-9]+.photo.sina.com.cn/(orignal|(b|)middle)/[a-z0-9]+)		$SET(1=\u)
这个$URL()中的url地址可以匹配到http://static1.photo.sina.com.cn/bmiddle/44491d9d44e3f488a5e30,
另外,sidki的说明里也提到一些prox帮助里没说明的东西
You don't need to match the entire value string in $IHDR(), $OHDR(),
$RESP(), or $URL() commands.

Examples:
$IHDR(Content-Type:( ) image/j)
$OHDR(User-Agent:*opera)
$RESP(2)
^$RESP([345])
$URL(http://www.Shonen.Knife.com/Naoko/M)


至于cb的图片的问题,既然你的替换已经成功了,图片显示不出来,很可能是referer没写对。楼上ph回复里已经说明了如何解决
删除 Referer 并不是解决防盗链的灵丹妙药。至于 sina ,你可以开着 log window 看看能正常显示图片时的 Referer 是什么。
这一条规则$URL(http://img.cnbeta.com/) $SET(1=\u)
访问cb的图片并不是只替换为img.cnbeta.com,而是整个图片的url,访问的是img.cnbeta.com/123.jpg,则url也是它。把sidki的说明看一下应该会明白

另外,你的$URL(*)应该是不需要的,不限定url就不需要它
User avatar
cre
Moderator
Posts: 91
Joined: May 26 2009, 00:34

Re: 请问一下 Referer 的问题.

Post by cre »

刚发现自己又2B了.

Code: Select all

[HTTP headers]
In = FALSE
Out = TRUE
Key = "Referer:  Special be Referer (Out)"
URL = "$IHDR(Host: \0)($TST(\0=$LST(Referer)))"
Match = "*"
Replace = "\u"
根本没必要去TST
改成了

Code: Select all

[HTTP headers]
In = FALSE
Out = TRUE
Key = "Referer:  Special be Referer (Out)"
URL = "$IHDR(Host: $LST(Referer))"
Match = "*"
Replace = "\u"

非常谢谢ray.呵呵我还是以新手自居吧.我是一只大大菜鸟.
不过新浪那个,如果设置匹配$IHDR(Accept: image/*)好像还是不能匹配阿....是那会写法有问题么?忘了咋写的反正就是不工作.能不能靠啥判别替没后缀的加上扩展名?


看到你的
$URL(http://img.cnbeta.com/) $SET(1=\u)

想起个问题....
顺道问下....希望不会造成困扰.
URLkill那个,如果用了
\w$LST(urlkill)
里面还可以写成$URL(http://ad.*)么?
我这写://ad 结果就是不工作,也没想那么多.
User avatar
phoenix
Site Admin
Posts: 526
Joined: Dec 29 2007, 16:27

Re: 请问一下 Referer 的问题.

Post by phoenix »

Ray4 wrote:仔细看一下,你的$LST是写在url匹配部分,我的是在match部分。自己实验了一下,\u,\h等这些,在url匹配部分赋值给变量是得不到任何结果的
请参考此帖: http://forum.proxomitron.cn/viewtopic.php?f=2&t=176
why wrote:改成了

Code: Select all

[HTTP headers]
In = FALSE
Out = TRUE
Key = "Referer:  Special be Referer (Out)"
URL = "$IHDR(Host: $LST(Referer))"
Match = "*"
Replace = "\u"
我很好奇你这条规则居然能成功,Host 是出去的 header ,怎么能用 $IHDR() 来检查呢?
User avatar
cre
Moderator
Posts: 91
Joined: May 26 2009, 00:34

Re: 请问一下 Referer 的问题.

Post by cre »

phoenix wrote: 我很好奇你这条规则居然能成功,Host 是出去的 header ,怎么能用 $IHDR() 来检查呢?
吓?!老大,我这好像成功的 :oops: 你那不成功么?
这个汗汗汗/// :ugeek:

汗.试了下用$ohdr()也行....
汗汗汗....确实是外出的我不正规....
我试验时候第一次ihdr就成功了,就没想过这问题.
那会还想着

host是人家主机,又不是本机当然要进来.本机才要出去呢!

现在想想觉得流程图好像是

请求个网页-->网页给出图片地址返回到本地浏览器-->浏览器再去请求-->请求发到主机-->主机响应-->要求referer-->伪造referer-->主机相信-->得到图片

ihdr检查到进来主机
然后改成referer:\u
然后发出请求?所以可以ihdr?
反正tcp/ip都要握手嘛.......!!!
汗汗汗....就是这样....哎!
正想着限制下$IHDR(Content-Type: image/*)
半天不成功.猛地发现不对,Content-Type是进来的,换成accept,行了!上来看看 :oops: 老大笑了.

Code: Select all

[HTTP headers]
In = FALSE
Out = TRUE
Key = "Referer:  Special be Referer (Out)"
URL = "$OHDR(Host: $LST(Referer))$OHDR(Accept: *image/*)"
Match = "*"
Replace = "\u"

Code: Select all

[HTTP headers]
In = FALSE
Out = TRUE
Key = "Referer:  Special be Referer (Out)"
URL = "$IHDR(Host: $LST(Referer))$IHDR(Accept: *image/*)"
Match = "*"
Replace = "\u"
也可以......
仔细试试发现这样也行

Code: Select all

[HTTP headers]
In = FALSE
Out = TRUE
Key = "Referer:  Special be Referer (Out)"
URL = "$IHDR(Host: $LST(Referer))$OHDR(Accept: *image/*)"
Match = "*"
Replace = "\u"
URL = " $IHDR(Host: $LST(Referer))$OHDR(Accept: *image/*)"
也行!

-o-!又进又出难道我就是薛定谔???看来proxomitron根本不要求$(I|O)

以上都用的ray提出的
Ray4 wrote:cb 的 referer 印象中是见到某个转贴 cb 文章的,图片不能正常显示而设
另外,cb 的全文输出我用的是这个(更新速度慢) http://feeds2.feedburner.com/cnbetafullrss
地址测试.
列表文件两行.如下

Code: Select all

www.uushare.com
img.cnbeta.com
User avatar
phoenix
Site Admin
Posts: 526
Joined: Dec 29 2007, 16:27

Re: 请问一下 Referer 的问题.

Post by phoenix »

why wrote:吓?!老大,我这好像成功的 你那不成功么?
试了一下进来的规则,如果放在 URL 部分,则用 $OHDR() 或 $IHDR() 来检测 Host 都成功。但如果放在 Match 部分,则只能用 $OHDR() ;而对于出去的规则,$OHDR() 和 $IHDR() 确似可以替换使用,无论是在 URL 或 Match 部分,也许是因为对于出去的规则,只能检测到出去的 header ,就不区分这2个命令了。 但保险起见,还是出去的 header 用 $OHDR() ,进来的 header 用 $IHDR() 吧。

关于哪些 header 是出去的,哪些是进来的,请参考 http://www.proxomitron.cn/help/HTTP%20H ... lters.html ,或参考 log window 。

另外,在 header filter 中,我测试了进来的规则,有些 $IHDR() 命令放在 URL 部分执行不成功,所以建议将 $OHDR() 和 $IHDR() 命令放在 Match 部分来用。URL 部分还原其本来的目的,只做 URL 匹配或测试其他全局变量用。在 web filter 中,则无此限制。

Code: Select all

URL = "$IHDR(Host: $LST(Referer))"
URL 部分本来就是匹配 URL 用,何必再检测 Host 呢?写成下面的形式更直接

Code: Select all

URL = "$LST(Referer)"

Code: Select all

$OHDR(Accept: *image/*)
Accept 值不会因为访问网页或图片而变化,所以这个测试无用。
Post Reply