前面曾经提过,在我制作Firefox的GreaseMonkey脚本"校内挖煤团"的时候,曾经遇到了一个问题。这个问题就是GreaseMonkey在执行GM_xmlhttpRequest时,虽然可以自定义很多http header参数,但是"referer"这个header却无被放入到Firefox的请求中。
在制作"校内挖煤团"时,我就发现用GM_xmlhttpRequest模拟的请求是和直接使用校内的自带界面一样的,可是就是不能让宠物正常挖煤。后来用Fiddler HTTP Debugger截取分析了一下http的报文才发现GM_xmlhttpRequest发出的http请求中没有referer,即使我在传入参数的headers属性中指定了referer的值。后来仔细看了看GreaseMonkey文档,确实也提到了这个问题,不过是属于浏览器的安全机制造成的,基本现在还是一个open的ticket,还是别指望GreaseMonkey能在短期内搞定这个referer header问题。
突然想到如果你的网站不想让GreaseMonkey直接使用GM_xmlhttpRequest调用一些特殊的资源(比如好友买卖游戏中的"折腾TA"的form),可以对请求的referer进行一下限定,不能是空,短期内会很有效哦。当然,GM脚本的作者也可以模拟用户的点击或是form提交,从而使用网站自身的原方式访问受限资源,不过至少这样一来浏览器是按照网站原来的方式在运行。
