Nodejs 破解某些网站图片的防盗链

Nodejs 破解某些网站图片的防盗链

今天做个项目学到了一点,防盗链机制如果允许无 Referer 访问的话,是很容易绕过的。

先说说防盗链的原理,http 协议中,如果从一个网页跳到另一个网页,http 头字段里面会带个 Referer。图片服务器通过检测 Referer 是否来自规定域名,来进行防盗链。

如果盗用网站是 https 的 protocol,而图片链接是 http 的话,则从 https 向 http 发起的请求会因为安全性的规定,而不带 referer,从而实现防盗链的绕过。

比如现在在 cnode 这里,由于我们启用了 https,所以任何 http 的图片几乎都可以直接贴过来并显示了。


20150519 update 现在我已经把出去的 https 也加上了 referer


27 回复

Node.js 破解某些网站图片的防盗链

今天在做一个项目时,学到了如何绕过某些网站的防盗链机制。防盗链机制通常通过检查 HTTP 请求头中的 Referer 字段来判断请求是否合法。如果允许无 Referer 访问的话,可以通过一些方法绕过这种限制。

防盗链的原理

HTTP 协议中,当用户从一个网页跳转到另一个网页时,HTTP 头字段中会带上 Referer。图片服务器通过检测 Referer 是否来自指定的域名,来判断请求是否合法,从而进行防盗链保护。

如果目标网站使用的是 HTTPS 协议,而图片链接是 HTTP 协议,那么从 HTTPS 向 HTTP 发起的请求可能会因为安全性规定而不会带上 Referer,从而实现防盗链的绕过。

示例代码

以下是一个简单的 Node.js 示例,展示如何绕过防盗链机制下载图片:

const axios = require('axios');
const fs = require('fs');

// 目标图片 URL
const imageUrl = 'http://example.com/image.jpg';

// 自定义 headers
const headers = {
    'Referer': 'https://yourdomain.com' // 替换为你的域名
};

axios.get(imageUrl, { headers })
    .then(response => {
        // 将图片写入本地文件
        fs.writeFileSync('./image.jpg', response.data);
        console.log('图片已成功下载!');
    })
    .catch(error => {
        console.error('下载图片时发生错误:', error);
    });

解释

  1. 安装依赖: 确保你已经安装了 axios 库,可以使用以下命令安装:

    npm install axios
    
  2. 设置 Referer: 在请求中设置自定义的 Referer 头字段,指向你自己的域名。这样即使目标网站设置了防盗链机制,也会认为请求是合法的。

  3. 下载图片: 使用 axios 发送 GET 请求下载图片,并将响应数据写入本地文件。

  4. 处理错误: 捕获可能发生的错误,以便调试和处理异常情况。

注意事项

  • 合法性:绕过防盗链机制可能违反某些网站的服务条款,请确保你的行为符合法律和道德规范。
  • 安全性:使用这种方法时,请注意不要泄露敏感信息,如真实域名等。

通过上述方法,你可以轻松地绕过某些网站的防盗链机制,但请注意遵守相关法律法规。


试试微博的相册 =,=

图片

论坛的 https速度感觉慢啊

不对呀,图片服务器检查到Referer不是规定的值,那么图片服务器会返回错误或给出提示,如果现在从Https加载做了防盗的http图片,由于没有Referer,图片是加载不了的吧。

贴个 QQ 空间的图过来试试:

网易空间的:

奈斯,学习了

默默点了举报…

我是来看图的。

这只是一些公司对协议机制上不完善,谈不上破解

百度的一直是参数错误!

test 测试百度图片

360图片测试 测试360图片

测试搜搜图片 测试搜搜图片

我去!测试下先。

防盗链机制如果允许无 Referer 访问的话

最关键是这句话

请用curl命令。。防盗链无解。

我在网站头加了 <meta name="referrer" content="always"> 所以出去的链接都会带 referrer 了,无论 https 或者 http

想请教下,能不能控制出去的referrer的值…

在http网站测试了下, 也能够正常现实. qq和网易,应该也没有防止图片被盗链.

防盗链没机制没接触过学习中

alt text

我也测

我上面发的这个图片不行?直接打开就可以,怎么破?

要破解某些网站图片的防盗链,可以使用 Node.js 来发送 HTTP 请求,并且手动设置 Referer 头信息。下面是一个简单的示例代码来说明如何实现这一点:

const axios = require('axios');

async function fetchImageWithReferer(url, referer) {
    try {
        const response = await axios({
            method: 'GET',
            url: url,
            headers: {
                'Referer': referer,
            },
            responseType: 'stream'
        });

        // 将图片流保存到本地文件
        const writer = fs.createWriteStream('image.jpg');
        response.data.pipe(writer);

        return new Promise((resolve, reject) => {
            writer.on('finish', resolve);
            writer.on('error', reject);
        });
    } catch (error) {
        console.error('Error fetching image:', error.message);
    }
}

// 使用示例
fetchImageWithReferer('https://example.com/image.jpg', 'https://yourwebsite.com')
    .then(() => console.log('Image fetched successfully'))
    .catch(error => console.error('Failed to fetch image:', error));

解释:

  1. 引入 axios 库:使用 axios 发送 HTTP 请求。
  2. 定义 fetchImageWithReferer 函数:该函数接收图片 URL 和 Referer 值作为参数。
  3. 设置请求头:在请求头中手动添加 Referer 字段。
  4. 处理响应:将图片响应数据流保存到本地文件。
  5. 错误处理:捕获并处理可能发生的错误。

这样就可以绕过某些网站的防盗链机制,获取并保存图片到本地。需要注意的是,这种行为可能违反某些网站的使用条款,因此请谨慎使用。

回到顶部