让浏览器端直接显示有防盗链的图片,JS伪造referer的问题-有难度,初哥慎入

cand 2013-09-20 01:51:16
正文内容
<img src="http://image64.360doc.com/DownloadImg/2013/09/1918/35314035_3.jpg">
正文内容这个图片作了防盗链,referer不是www.360.com就会返回403禁止访问,referer为空也不行。之前百度sina等,用JS将referer置空就可以了。使用服务器端代码,伪造REFERER,可以抓取这个图片,然后从服务器上让网民下载显示。这个缺点是图片要经过服务器,占用带宽和资源。

网上搜索,得知,下面JS代码可以伪造REFERER,不知道如何让客户端浏览器直接显示图片?

<script type="text/javascript">
//伪造REFERER
function Imagereferer(url) {
var obj = new ActiveXObject("WinHttp.WinHttpRequest.5.1");
obj.Open("get", url, false);
obj.Option(4) = 13056;
obj.Option(6) = false;
obj.setRequestHeader("Referer", "http://www.360doc.com");
obj.Send();
}


//预加载
function loadImage(url, callback) {
var img = new Image(); //创建一个Image对象,实现图片的预下载
img.src = url;

if (img.complete) { // 如果图片已经存在于浏览器缓存,直接调用回调函数
callback.call(img);
return; // 直接返回,不用再处理onload事件
}

img.onload = function () { //图片下载完毕时异步调用callback函数。
callback.call(img);//将回调函数的this替换为Image对象
};
};
</script>

假如本帖就是一HTML源码,如何能让上方那个图片,正常显示??
...全文
1930 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
plzzz 2013-09-20
  • 打赏
  • 举报
回复
只有中转,没别的办法吧, google搜图都是这样
l676331991 2013-09-20
  • 打赏
  • 举报
回复
有个思路,不知道行不行。 js发起ajax请求之前修改http header是办得到的,我觉得这里要解决跨域异步请求的问题。 姑且认为撸主有办法使用某种ActiveX发起异步请求,并修改http报头里的referer,然后呢,我们需要得到请求返回的二进制数据,接着要让这坨数据以图像形式呈现在页面上。 据我所知,XMLHttpRequest修改http header是很简单的事,XMLHttpRequest的第二个版本也已经支持跨域请求(但是好像要服务器允许呢),而且,xhr返回的response引用可以直接拿到服务器返回的二进制数据,就是所谓Blob类型的数据。接着,又据我所知,HTML5中js有一个货叫URL,它有个方法叫createObjectURL,正好接受一个Blob,返回一个blob://开头的url(姑且称之为blob伪协议,想想打开本地html文件时的file://协议就知道),可以供某些标签的src属性使用。于是,完美的解决了撸主的问题。等等,貌似跨域发起请求这块好像还是有问题,撸主不妨一试。

87,910

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧