此图片来自微信公众平台未经允许不可引用该怎么办?

网站上有些文章的图片是复制的微信,现在失效了该怎么办呢?

阅读 9.8k
评论
    7 个回答
    • 1.2k

    head标签里添加 <meta name="referrer" content="never">

      给html加上

      <meta name="referrer" content="no-referrer" />

        1.把所有的图片地址匹配替换
        2.去掉图片域名,用服务端反向代理图片请求

        防盗链的原因是浏览器请求非本域名下的资源,会带上referer头,微信做了检测屏蔽请求。

          • 1.3k

          把图片保存下来放到自己的服务器上。理论上微信是不允许的,但是往往小打小闹,也不会追究你。

            提交文章的时候,远程图片本地化。可参考微信图片保存

            $rurl=微信图片地址
            $picname=date('YmdHis').'_'.rand(10000,99999).'.'.WeixinImage_pictype($rurl);
            $pic=$path.'/'.$picname;
            $getpic=WeixinImage_Save($rurl,$pic,$picname);

            function WeixinImage_Save($url,$filename="",$name) {

            global $zbp;
            if($url=="") return false;
            //if($filename=="") { //为毛文件名会空?
                $ext=strrchr($name,".");
            //$ext=WeixinImage_pictype($url);
                if($ext!=".gif" && $ext!=".jpeg" && $ext!=".png") return false;
            //    $filename=date("YmdHis").$ext;
            //}
            

            // ob_start();
            // readfile($url);

            $img = GetHttpContent($url);

            // ob_end_clean();

            $size = strlen($img);
            $fp2=@fopen($filename, "a");
            fwrite($fp2,$img);
            fclose($fp2);
            return true; 

            }

              用php的GD库把你从微信那边弄来的图片转成自己的图片就可以了

                这是一个“Referrer防盗链”问题。

                阿里云OSS上的资源也可以设置防盗链。
                OSS 提供 HTTP Referer 白名单配置,用于防止他人盗用 OSS 数据,了解 设置防盗链使用指南

                微信设置了HTTP Referrer白名单,用于放置他人盗取微信平台图片。

                image.png

                想要解决”此图片来自微信公众平台,未经允许不可引用“的问题。

                head标签内加上下面这行标签即可。

                <meta name="referrer" content="no-referrer">

                为什么可以呢?

                默认情况下,浏览器会在请求头上带上Referrer:location.origin,被访问网站在接到这样的一个请求访问时,可以根据Referrer请求头做出权限控制。

                微信官方根据Referrer HTTP Request header做了权限控制,当访问网站不在自己的信任名单中时,会返回一张”此图片来自微信公众平台,未经允许不可引用“的图片。

                引用策略剖析

                • HTTP有一个概念叫做引用策略(Referrer Policy),简单理解就是在Request头中是否发送Referrer头
                • 浏览器可以通过meta标签去设置引用策略,上面的name可以理解为策略key,content可以理解为策略value
                • 默认情况下的引用策略是Referrer Policy:no-referrer-when-downgrade,会在被访问网站安全的情况下在Request头中是否发送Referrer: location.origin
                • 当设置为name="referrer" content="no-referrer"时,Referrer Policy:no-referrer,请求头Request中不会带上Referrer头

                形象理解

                默认引用策略情况下:

                General
                Referrer Policy:no-referrer-when-downgrade
                
                Request Headers
                Referrer: http://foo.bar.baz.com(location.origin)

                设置content="no-referrer"情况下:

                General
                Referrer Policy:no-referrer
                
                Request Headers
                Referrer(没有这个请求头)

                参考:
                https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Referrer-Policy
                https://developer.mozilla.org/en-US/docs/Web/HTML/Element/meta/name

                  撰写回答

                  登录后参与交流、获取后续更新提醒

                  相似问题
                  推荐文章