Se o hotlinking de outros sites aumentar seus custos de tráfego no OSS, configure uma lista de permissões ou de bloqueios de Referer para restringir o acesso.
Como funciona
Quando um navegador solicita um arquivo do OSS, o cabeçalho HTTP Referer identifica a página de origem da requisição. O OSS valida esse valor de Referer para verificar a origem da requisição.
Após a configuração da proteção contra hotlink, o OSS avalia as requisições na seguinte ordem:
-
Verificação de Referer vazio: O OSS verifica se o Referer está vazio. Nesse caso, aplica-se a seguinte lógica:
Se você permitir requisições com Referer vazio, a requisição será permitida.
Se você não permitir requisições com Referer vazio e a lista de permissões estiver vazia, a requisição será permitida.
Se você não permitir requisições com Referer vazio e a lista de permissões não estiver vazia, a requisição será negada.
Caso o Referer não esteja vazio, a verificação prossegue para a próxima etapa.
Verificação da lista de bloqueios: O OSS verifica se o Referer corresponde a alguma entrada na lista de bloqueios. Uma correspondência resulta em negação imediata — a lista de permissões não é verificada. Caso contrário, o processamento continua.
Verificação da lista de permissões: O OSS verifica se o Referer corresponde a alguma entrada na lista de permissões. Uma correspondência permite a requisição; a ausência de correspondência a nega.
Procedimento
Acesse a lista de Buckets e clique em no bucket desejado.
-
No painel de navegação à esquerda, escolha . Ative a opção Hotlink Protection e configure as regras de Referer conforme necessário:
Referer Whitelist: Domínios com permissão para acessar seus recursos. Insira um por linha.
Referer Blacklist: Domínios com acesso negado. Insira um por linha. A lista de bloqueios tem prioridade sobre a lista de permissões.
Allow Empty Referer: Define se o sistema deve permitir requisições sem cabeçalho Referer, como acessos diretos pelo navegador.
Truncate QueryString: Define se o sistema deve ignorar a string de consulta após
?na URL durante a correspondência. Consulte as Regras de análise de string de consulta.
As regras de Referer aceitam curingas:
Curinga
Descrição
Exemplo
*Corresponde a zero ou mais caracteres.
*.example.comcorresponde ahttp://www.example.comehttps://help.example.com.?Corresponde a exatamente um caractere.
http://www.aliyun?.comcorresponde ahttp://www.aliyunc.com.As regras de Referer também aceitam domínios ou endereços IP com portas, como
http://www.example.com:8080e10.10.10.10:8080.NotaA correspondência diferencia o protocolo. Uma regra para
http://www.aliyun.comnão corresponde ahttps://www.aliyun.com. Adicione entradas tanto para HTTP quanto para HTTPS. Clique em Save para aplicar as configurações.
Casos de uso
Permitir acesso apenas de sites confiáveis
Permita que apenas sites especificados acessem seus recursos do OSS, mantendo o acesso direto pelo navegador.
Etapa 1: Obter o Referer
Antes de configurar a regra, identifique o Referer das requisições aos seus recursos do OSS:
Usar logs em tempo real do OSS: Acesse a lista de Buckets. Na página do bucket desejado, escolha e localize o campo
referer. Um hífen (-) indica uma requisição com Referer vazio.Usar ferramentas de desenvolvedor do navegador: Pressione F12 para abrir as ferramentas de desenvolvedor. No painel Network, verifique o cabeçalho
Refererda requisição.
Etapa 2: Configurar a regra de Referer
|
Parâmetro |
Valor |
Descrição |
|
Referer Whitelist |
|
Adicione domínios confiáveis para HTTP e HTTPS. Inclua o domínio do console para manter as funções de gerenciamento operacionais. |
|
Referer Blacklist |
Deixar vazio |
Nenhuma origem a ser bloqueada. |
|
Allow Empty Referer |
Allow |
Permite acesso direto pelo navegador e por clientes que omitem o Referer. |
|
Truncate QueryString |
Allow |
Ignora a string de consulta da URL para uma correspondência flexível. |
Etapa 3: Verificar a configuração
# Simulate a request from a whitelisted Referer (expected to succeed)
curl -e "http://www.aliyun.com" http://your-bucket-name.oss-cn-hangzhou.aliyuncs.com/demo.txt
# Simulate a request from a non-whitelisted Referer (expected to return AccessDenied)
curl -e "http://www.example.com" http://your-bucket-name.oss-cn-hangzhou.aliyuncs.com/demo.txt
# Simulate a request with an empty Referer (expected to succeed)
curl http://your-bucket-name.oss-cn-hangzhou.aliyuncs.com/demo.txt
Bloquear sites maliciosos
Permita o acesso da maioria das origens, mas bloqueie sites maliciosos específicos usando uma lista de bloqueios.
Etapa 1: Identificar o Referer
Acesse a lista de Buckets. Na página do bucket desejado, escolha . Filtre por registros de tráfego anormal e verifique o campo referer para identificar o domínio malicioso.
Etapa 2: Configurar a regra de Referer
|
Parâmetro |
Valor |
Descrição |
|
Referer Whitelist |
|
Permite acesso de todas as origens. |
|
Referer Blacklist |
|
Adicione os domínios maliciosos. Use curingas para bloquear um domínio inteiro e seus subdomínios. |
|
Allow Empty Referer |
Allow |
Garante o funcionamento do acesso direto e de clientes legítimos. |
|
Truncate QueryString |
Allow |
Ignora a string de consulta da URL para uma correspondência flexível. |
Etapa 3: Verificar a configuração
# Simulate a request from a normal website (expected to succeed)
curl -e "http://www.example.com" http://your-bucket-name.oss-cn-hangzhou.aliyuncs.com/demo.txt
# Simulate a request from a blacklisted website (expected to return AccessDenied)
curl -e "http://bad-site.example" http://your-bucket-name.oss-cn-hangzhou.aliyuncs.com/demo.txt
# Simulate a request with an empty Referer (expected to succeed)
curl http://your-bucket-name.oss-cn-hangzhou.aliyuncs.com/demo.txt
Permitir acesso de mini programas do WeChat
Os mini programas do WeChat usam um formato fixo de Referer: https://servicewechat.com/{appid}/{version}/page-frame.html. Configure sua regra para corresponder a esse formato.
Etapa 1: Identificar o formato do Referer
O formato do Referer para mini programas do WeChat é fixo e previsível, permitindo a configuração direta com um curinga. Para confirmar o formato exato, acesse a lista de Buckets e verifique o campo referer na seção do bucket desejado.
Etapa 2: Configurar a regra de Referer
|
Parâmetro |
Valor |
Descrição |
|
Referer Whitelist |
|
O curinga abrange todos os AppIDs e versões dos mini programas. Inclua o domínio do console para manter as funções de gerenciamento operacionais. |
|
Referer Blacklist |
Deixar vazio |
Nenhuma origem a ser bloqueada. |
|
Allow Empty Referer |
Allow |
Alguns mini programas omitem o Referer. Permitir Referers vazios garante a compatibilidade. |
|
Truncate QueryString |
Allow |
Ignora a string de consulta da URL para uma correspondência flexível. |
Etapa 3: Verificar a configuração
# Simulate a request from a WeChat mini program (expected to succeed)
curl -e "https://servicewechat.com/wx1234567890abcdef/1/page-frame.html" http://your-bucket-name.oss-cn-hangzhou.aliyuncs.com/demo.txt
# Simulate a request from another source (expected to return AccessDenied)
curl -e "http://www.example.com" http://your-bucket-name.oss-cn-hangzhou.aliyuncs.com/demo.txt
# Simulate a request with an empty Referer (expected to succeed)
curl http://your-bucket-name.oss-cn-hangzhou.aliyuncs.com/demo.txt
Permitir acesso ao console do OSS
Após ativar a proteção contra hotlink, adicione o domínio do console do OSS à lista de permissões para manter as funções de gerenciamento operacionais.
Etapa 1: Configurar a regra
|
Parâmetro |
Valor |
Descrição |
|
Referer Whitelist |
|
O curinga abrange todos os subdomínios do console do OSS, garantindo que as visualizações funcionem em todas as regiões. |
|
Referer Blacklist |
Deixar vazio |
Nenhuma origem a ser bloqueada. |
|
Allow Empty Referer |
Allow |
Permite o funcionamento do acesso direto e das visualizações no console. |
|
Truncate QueryString |
Allow |
Ignora a string de consulta da URL para uma correspondência flexível. |
Etapa 2: Verificar a configuração
# Simulate access from the console (expected to succeed)
curl -e "https://oss.console.alibabacloud.com" http://your-bucket-name.oss-cn-hangzhou.aliyuncs.com/demo.txt
Você também pode verificar visualizando e baixando um arquivo diretamente pelo console do OSS.
Bloquear acesso direto via URL
Não permita Referers vazios para exigir que todas as requisições tenham origem em um site especificado, impedindo o acesso direto por URL.
Essa configuração bloqueia todo o acesso direto, incluindo favoritos e links em e-mails. Alguns plugins de navegador, gerenciadores de download e reprodutores de vídeo podem não funcionar, pois frequentemente omitem o Referer.
Etapa 1: Determinar o Referer
Identifique todas as combinações de domínio e protocolo do seu site para cobrir todos os cenários legítimos de acesso.
Etapa 2: Configurar a regra
|
Parâmetro |
Valor |
Descrição |
|
Referer Whitelist |
|
Domínio do seu site. Adicione todas as combinações necessárias de domínio e protocolo. Inclua o domínio do console para manter as funções de gerenciamento operacionais. |
|
Referer Blacklist |
Deixar vazio |
Nenhuma origem a ser bloqueada. |
|
Allow Empty Referer |
No |
Bloqueia o acesso direto pela barra de endereços do navegador. |
|
Truncate QueryString |
Allow |
Ignora a string de consulta da URL para uma correspondência flexível. |
Etapa 3: Verificar a configuração
# Simulate a request from the website (expected to succeed)
curl -e "http://www.example.com" http://your-bucket-name.oss-cn-hangzhou.aliyuncs.com/demo.txt
# Simulate direct access (expected to return AccessDenied)
curl http://your-bucket-name.oss-cn-hangzhou.aliyuncs.com/demo.txt
# Simulate a request from another website (expected to return AccessDenied)
curl -e "http://other.example" http://your-bucket-name.oss-cn-hangzhou.aliyuncs.com/demo.txt
Regras de análise de string de consulta
Se você desativar a opção Truncate query string, o OSS analisa a string de consulta da seguinte forma:
|
Regra |
Descrição |
|
A string de consulta não passa por decodificação de URL. |
Para uma URL de requisição |
|
Os parâmetros não diferenciam maiúsculas de minúsculas. |
Para uma URL de requisição |
|
A ordem dos parâmetros é significativa. |
Para uma URL de requisição |
Considerações para produção
Risco de bypass de cache da CDN: Requisições de hotlink podem atingir um nó de borda da CDN e serem servidas do cache, contornando a proteção contra hotlink do OSS. Para evitar isso, configure as mesmas regras de proteção contra hotlink de Referer na sua CDN.
Impacto da Referrer-Policy do navegador: Os navegadores suportam o cabeçalho Referrer-Policy, que controla a quantidade de informações de Referer enviadas em requisições cross-origin. Políticas como
no-referrerfazem o navegador omitir o Referer, e o OSS trata essas requisições como tendo Referer vazio. Considere esse comportamento ao configurar as regras.Compatibilidade de reprodução de vídeo: A tag nativa
videodo navegador envia uma requisição inicial com Referer e requisições subsequentes de dados de mídia com Referer vazio. Para garantir a reprodução do vídeo, você deve permitir o acesso para requisições com Referer vazio.
Cotas e limites
acesso anônimo ou uma URL assinada. Chamadas de API assinadas com uma AccessKey (requisições que incluem um cabeçalho
Authorization) não são restritas pelas regras de proteção contra hotlink.Limite de tamanho da lista: A soma das listas de permissões e de bloqueios de Referer não pode exceder 20 KB.
Escopo: A proteção contra hotlink aplica-se no nível do bucket. Não há suporte para regras por objeto ou por diretório.
Perguntas frequentes
Por que a proteção contra hotlink não está funcionando?
Verifique os itens abaixo nesta ordem:
Verificação do ambiente do navegador: Certos ambientes, como mini programas do WeChat ou iframes, podem modificar o Referer. Use os logs em tempo real do OSS ou as ferramentas de desenvolvedor do navegador para identificar o Referer real e ajuste sua regra.
Formato do Referer: Verifique se a entrada do Referer inclui o prefixo de protocolo (
http://ouhttps://). A omissão faz com que a regra falhe.Bypass de cache da CDN: Se sua CDN não tiver proteção contra hotlink, as requisições podem contornar a validação do OSS. Configure regras correspondentes de proteção contra hotlink na sua CDN.
Resolução de erros de acesso negado em mini programas do WeChat
Os mini programas do WeChat usam um Referer fixo que começa com https://servicewechat.com/. Adicione *servicewechat.com à sua lista de permissões para permitir o acesso de todos os mini programas.
Resolução de erros de acesso negado para acesso direto
O acesso direto pelo navegador envia um Referer vazio. Se Referers vazios não forem permitidos, o acesso será negado. Para permitir o acesso direto, altere a opção Allow Empty Referer nas configurações de proteção contra hotlink para Allow.
Resolução do erro InlineDataTooLarge
A soma das listas de permissões e de bloqueios de Referer excede o limite de 20 KB. Use curingas para consolidar regras ou remova entradas desnecessárias.