ijd8.COM

A simple blog for an old Ma Nong.

BAE BCS 设置防盗链的方法

Permalink

BAE BCS 的后台没有设置防盗链的地方,需要通过API 的set_acl 设置,官方文档说得比较含糊。下面是一个可行代码。

环境是python,php 原理也一样。

首先看看官方给的示例。

对多文件设置防盗链

可通过对Bucket设置相关Policy,实现对多文件进行防盗链设置。

JSON: 防盗链acl
1
2
3
4
5
6
7
8
9
10
11
{"statements":
 [
  {
    "action":["get_object"],
    "effect":"allow",
    "resource":["public-demo/"],
    "user":["*"],
    "referer":["http://www.baidu.com/*"]
   }
 ]
}

上述Policy可实现:

如果访问请求来自于referer所指定的 www.baidu.com ,则允许其对public-demo bucket中的所有存储对象进行get_object操作。

你可以先通过get_acl 获取原来cal 的内容,对比一下其实是多了这个属性

JSON:
1
"referer":["http://www.baidu.com/*"]

下面是python 的实现代码:

Python: 设置acl 防盗链
1
2
3
4
5
6
7
8
def set_bucket_referer():
    """
    对一个 bucket 设置防盗链,只需运行一次
    """
    acl_referer = '{"statements":[{"action":["*"],"effect":"allow","resource":["%s\\/"],"user":["*"],"referer":["http:\/\/%s\/*"]}]}' % (BUCKET, MAJOR_DOMAIN)
    from bae.api import bcs
    mybcs = bcs.BaeBCS(BCSHOST, AK, SK)
    mybcs.set_acl(BUCKET, "", acl_referer)

其中MAJOR_DOMAIN是主域名,也可以多加几个域名。

图片防盗链测试:深圳西冲海滩日出

深圳西冲海滩日出

Write a Comment

Submit Comment Login
Based on Golang + fastHTTP + sdb | go1.16.7 Processed in 0ms