Como impedir hotlink em arquivos JS e CSS

Como Impedir Hotlink em arquivos Javascript e CSS

Este é um problema muito comum na Internet. Hotlink ocorre quando um site “X”, utiliza Javascript, CSS ou imagens de um site “Y”, linkando para eles diretamente em seu site, causando roubo de banda e perda de performance do servidor “X”. Aprenda como impedir o uso de seus arquivos Javascript e CSS por sites terceiros.

Na Internet, é muito comum o assunto HotLink para imagens, eu inclusive já fiz um tutorial para evitar o uso indevido das imagens do seu site. Entretanto, hotlink em arquivos javascript e css não existe uma solução definitiva, por isso me propus a divulgá-la aqui no meu blog. Eu mesmo já tive este problema, eu criei um utilitário online em Javascript, e algumas pessoas acessaram diretamente o meu arquivo JS para copiá-lo. Em outros casos, simplesmente linkaram para o meu arquivo no site deles, roubando a minha banda.

Solução para Hotlink em CSS/JS

A solução consiste em permitir que, apenas o seu website possa acessar este arquivo Javascript ou CSS, com o uso de PHP. De qualquer forma, o arquivo jS/CSS precisa ser acessível para o navegador, caso contrário nem o seu usuário iria poder acessá-lo. A idéia aqui não é impedir a visualização do arquivo, mas impedir que o mesmo seja usado fora do seu site, através do hotlink. Caso queira apenas impedir a visualização, veja este post:

Nos arquivos do seu site que poderão usar o seu JS/CSS, crie uma sessão como no exemplo abaixo, e faça a ligação com os arquivos CSS/JS normalmente (exceto pelo fato que o arquivo deverá ser renomeado com a extensão PHP no final, portanto se o arquivo se chamar script.js, deverá se chamar agora script.js.php).

<?php
	session_start();
	$_SESSION&#91;'autenticacao'&#93; = "teste";
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Hotlink Javascript</title>
<script type="text/javascript" src="script.js"></script>
</head>

<body>
</body>
</html>

e o arquivo “script.js.php“, fazemos as verificações necessárias

<?php
	session_start();
	header("Content-Type: text/javascript;charset=utf-8");
	ini_set("display_errors","false");
	$seusite = "http://www.SEUSITE.com.br";
	if(!stristr($_SERVER&#91;"HTTP_REFERER"&#93;,$seusite) || !isset($_SESSION&#91;'autenticacao'&#93;)):
		if(isset($_SERVER&#91;'SCRIPT_FILENAME'&#93;) && 'script.js.php' == basename($_SERVER&#91;'SCRIPT_FILENAME'&#93;)):
			die("Você não pode visualizar este arquivo diretamente");
		endif;
	endif;
?>
/*daqui em diante o script javascript será processado normalmente */
alert("Deu certo..está vendo esta mensagem porque foi provado que vc está em meu site");

Caso seja exibido o alerta, é porque a sua página está autorizada a usar o seu arquivo JS. Caso qualquer outro site acesse diretamente o seu arquivo ou faça hotlink, será exibida a mensagem de erro.

Para bloquear CSS, é o mesmo procedimento, o que vai mudar é o header, que em vez de text/javascript, ficará text/css
Espero ter sido útil

Lucas Peperaio

Estudante de Ciência da Computação, trabalho com desenvolvimento web há 5 anos e com hardware há 8. Nas horas vagas, sou entusiasta de Overclock, Casemod e Benchmarks, além é claro dos Games. Apaixonado por informática e pela vida, procuro compartilhar meus conhecimentos e assim, ajudar as pessoas. Siga-me no youtube, posto semanalmente muito material sobre Hardware, tecnologia e games em geral: Clique aqui

Receba gratuitamente em seu E-mail
Novos artigos do meu Blog!


Após o Cadastro você receberá um Email Automático. Clique no link enviado para Ativar e receber as novidades.

Categorias do site





1 Comentário Deixe o seu

  1. Jorge

    Lucas pode me ajudar, sou leigo no assunto, mas meu blog foi invadido, depois de muito apagar aqui e ali, restou um problema grave. Os intrusos injeta um código malicioso em javascript no header do blog, não adianta deletar o código, pois em 48 horas o código aparece novamente. O impacto aparece no Google. Ao clicar no titulo da postagem redireciona para site de terceiros;

    Como posso eliminar este problema?

    Procedimento tomados: atualização do WordPress, atualização do templete, mudança de senhas,

    Obrigado.