全部產品
Search
文件中心

Object Storage Service:防盜鏈

更新時間:Aug 30, 2018

為了防止您在OSS上的資料被其他人盜鏈而產生額外費用,您可以設定防盜鏈功能,包括以下參數:

  • Referer白名單。僅允許指定的網域名稱訪問OSS資源。
  • 是否允許空Referer。如果不允許空Referer,則只有HTTP或HTTPS header中包含Referer欄位的請求才能訪問OSS資源。

更多關於防盜鏈的介紹,請參見開發指南中的設定防盜鏈。防盜鏈的完整代碼請參見GitHub

設定防盜鏈

以下代碼用於設定防盜鏈:

  1. <?php
  2. if (is_file(__DIR__ . '/../autoload.php')) {
  3. require_once __DIR__ . '/../autoload.php';
  4. }
  5. if (is_file(__DIR__ . '/../vendor/autoload.php')) {
  6. require_once __DIR__ . '/../vendor/autoload.php';
  7. }
  8. use OSS\OssClient;
  9. use OSS\Core\OssException;
  10. use OSS\Model\RefererConfig;
  11. // 阿里雲主帳號AccessKey擁有所有API的存取權限,風險很高。強烈建議您建立並使用RAM帳號進行API訪問或日常運維,請登入 https://ram.console.aliyun.com 建立RAM帳號。
  12. $accessKeyId = "<yourAccessKeyId>";
  13. $accessKeySecret = "<yourAccessKeySecret>";
  14. // Endpoint以杭州為例,其它Region請按實際情況填寫。
  15. $endpoint = "http://oss-cn-hangzhou.aliyuncs.com";
  16. $bucket= "<yourBucketName>";
  17. $refererConfig = new RefererConfig();
  18. // 設定允許空Referer。
  19. $refererConfig->setAllowEmptyReferer(true);
  20. // 添加Referer白名單。Referer參數支援萬用字元星號(*)和問號(?)。
  21. $refererConfig->addReferer("www.aliiyun.com");
  22. $refererConfig->addReferer("www.aliiyuncs.com");
  23. try{
  24. $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint);
  25. $ossClient->putBucketReferer($bucket, $refererConfig);
  26. } catch(OssException $e) {
  27. printf(__FUNCTION__ . ": FAILED\n");
  28. printf($e->getMessage() . "\n");
  29. return;
  30. }
  31. print(__FUNCTION__ . ": OK" . "\n");

獲取防盜鏈資訊

以下代碼用於獲取防盜鏈資訊:

  1. <?php
  2. if (is_file(__DIR__ . '/../autoload.php')) {
  3. require_once __DIR__ . '/../autoload.php';
  4. }
  5. if (is_file(__DIR__ . '/../vendor/autoload.php')) {
  6. require_once __DIR__ . '/../vendor/autoload.php';
  7. }
  8. use OSS\OssClient;
  9. use OSS\Core\OssException;
  10. use OSS\Model\RefererConfig;
  11. // 阿里雲主帳號AccessKey擁有所有API的存取權限,風險很高。強烈建議您建立並使用RAM帳號進行API訪問或日常運維,請登入 https://ram.console.aliyun.com 建立RAM帳號。
  12. $accessKeyId = "<yourAccessKeyId>";
  13. $accessKeySecret = "<yourAccessKeySecret>";
  14. // Endpoint以杭州為例,其它Region請按實際情況填寫。
  15. $endpoint = "http://oss-cn-hangzhou.aliyuncs.com";
  16. $bucket= "<yourBucketName>";
  17. $refererConfig = null;
  18. try{
  19. $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint);
  20. $refererConfig = $ossClient->getBucketReferer($bucket);
  21. } catch(OssException $e) {
  22. printf(__FUNCTION__ . ": FAILED\n");
  23. printf($e->getMessage() . "\n");
  24. return;
  25. }
  26. print(__FUNCTION__ . ": OK" . "\n");
  27. print($refererConfig->serializeToXml() . "\n");

清空防盜鏈

以下代碼用於清空防盜鏈:

  1. <?php
  2. if (is_file(__DIR__ . '/../autoload.php')) {
  3. require_once __DIR__ . '/../autoload.php';
  4. }
  5. if (is_file(__DIR__ . '/../vendor/autoload.php')) {
  6. require_once __DIR__ . '/../vendor/autoload.php';
  7. }
  8. use OSS\OssClient;
  9. use OSS\Core\OssException;
  10. use OSS\Model\RefererConfig;
  11. // 阿里雲主帳號AccessKey擁有所有API的存取權限,風險很高。強烈建議您建立並使用RAM帳號進行API訪問或日常運維,請登入 https://ram.console.aliyun.com 建立RAM帳號。
  12. $accessKeyId = "<yourAccessKeyId>";
  13. $accessKeySecret = "<yourAccessKeySecret>";
  14. // Endpoint以杭州為例,其它Region請按實際情況填寫。
  15. $endpoint = "http://oss-cn-hangzhou.aliyuncs.com";
  16. $bucket= "<yourBucketName>";
  17. $refererConfig = new RefererConfig();
  18. try{
  19. $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint);
  20. // 防盜鏈不能直接清空,需要新建一個允許空Referer的規則來覆蓋之前的規則。
  21. $ossClient->putBucketReferer($bucket, $refererConfig);
  22. } catch(OssException $e) {
  23. printf(__FUNCTION__ . ": FAILED\n");
  24. printf($e->getMessage() . "\n");
  25. return;
  26. }
  27. print(__FUNCTION__ . ": OK" . "\n");