Aula: Proteção de conteúdo com MU-Plugin – Desabilitar clique direito, cópia e atalhos
Objetivo: Substituir plugins de proteção de conteúdo (como disabled-source-disabled-right-click-and-content-protection) por um MU-Plugin enxuto, que bloqueia clique direito, seleção de texto, teclas de atalho (Ctrl+C, Ctrl+U, F12, etc.) e ainda libera totalmente Administradores e Editores.
Contexto: Muitos sites usam plugins pesados para evitar cópia de conteúdo. Vamos criar uma solução própria, com código limpo, que não sobrecarrega o banco de dados e é fácil de manter.
Código do MU-Plugin
Crie a pasta wp-content/mu-plugins/neodoor-disable-rightclick/ e dentro dela o arquivo neodoor-disable-rightclick.php com o conteúdo abaixo:
<?php
/**
* Plugin Name: Neodoor Disable Right Click & Copy Protection
* Description: Bloqueia clique direito, seleção de texto, printscreen (cópia) e atalhos do navegador, mas libera para Administradores e Editores.
* Version: 1.0
* Author: Reinaldo (Neodoor.neo)
*/
if ( ! defined( 'ABSPATH' ) ) {
exit;
}
class Neodoor_Disable_RightClick {
private static $instance = null;
public static function get_instance() {
if ( null === self::$instance ) {
self::$instance = new self();
}
return self::$instance;
}
private function __construct() {
add_action( 'wp_enqueue_scripts', [ $this, 'add_protection_script' ] );
}
/**
* Verifica se o usuário atual é Administrador ou Editor.
*/
private function user_has_full_access() {
if ( is_user_logged_in() ) {
$user = wp_get_current_user();
$allowed_roles = [ 'administrator', 'editor' ];
if ( array_intersect( $allowed_roles, (array) $user->roles ) ) {
return true;
}
}
return false;
}
public function add_protection_script() {
if ( $this->user_has_full_access() ) {
return; // Libera total para admins/editores
}
add_action( 'wp_head', [ $this, 'output_protection_js' ] );
add_action( 'wp_head', [ $this, 'output_protection_css' ] );
}
public function output_protection_js() {
?>
<script>
(function() {
// Bloquear clique direito
document.addEventListener('contextmenu', function(e) {
e.preventDefault();
return false;
});
// Bloquear seleção de texto
document.addEventListener('selectstart', function(e) {
e.preventDefault();
return false;
});
// Bloquear copiar, cortar, colar
document.addEventListener('copy', function(e) {
e.preventDefault();
return false;
});
document.addEventListener('cut', function(e) {
e.preventDefault();
return false;
});
document.addEventListener('paste', function(e) {
e.preventDefault();
return false;
});
// Bloquear teclas de atalho
document.addEventListener('keydown', function(e) {
// Ctrl+U (ver fonte)
if (e.ctrlKey && e.key === 'u') {
e.preventDefault();
return false;
}
// Ctrl+C / Ctrl+X
if (e.ctrlKey && (e.key === 'c' || e.key === 'x')) {
e.preventDefault();
return false;
}
// Ctrl+S (salvar)
if (e.ctrlKey && e.key === 's') {
e.preventDefault();
return false;
}
// F12 (DevTools)
if (e.key === 'F12') {
e.preventDefault();
return false;
}
// Ctrl+Shift+I, Ctrl+Shift+J, Ctrl+Shift+C
if (e.ctrlKey && e.shiftKey && (e.key === 'I' || e.key === 'J' || e.key === 'C')) {
e.preventDefault();
return false;
}
// Ctrl+Shift+K (Firefox)
if (e.ctrlKey && e.shiftKey && e.key === 'K') {
e.preventDefault();
return false;
}
});
// Prevenir arraste de imagens
document.querySelectorAll('img').forEach(function(img) {
img.addEventListener('dragstart', function(e) {
e.preventDefault();
return false;
});
});
})();
</script>
<?php
}
public function output_protection_css() {
?>
<style>
body {
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}
img {
-webkit-user-drag: none;
user-drag: none;
}
a, button, input, textarea {
user-select: text; /* Permite selecionar dentro de campos de formulário */
}
</style>
<?php
}
}
Neodoor_Disable_RightClick::get_instance();
Observação importante: No código acima, a tag ?> dentro do método output_protection_js está escrita com > apenas para evitar conflito com o HTML. Ao copiar, substitua ?> por ?> (sem espaços). O mesmo para < que deve virar <. Se preferir, use a versão corrigida disponível no repositório do projeto.
Instruções de instalação
- Certifique-se de que o autoloader
loader.phpesteja presente em/mu-plugins/(conforme aula anterior). - Crie a pasta
neodoor-disable-rightclickdentro de/mu-plugins/. - Dentro dela, crie o arquivo
neodoor-disable-rightclick.phpe cole o código (corrigindo os caracteres<e>conforme observação). - Desative e remova qualquer plugin similar (ex:
disabled-source-disabled-right-click-and-content-protection).
Teste
- Visitante (não logado): tente clicar com botão direito – não deve abrir menu. Tente selecionar texto – não será possível. Pressione
Ctrl+U– a fonte da página não abre. PressioneF12– o DevTools pode não abrir (em alguns navegadores ainda abre, mas a tecla de atalho é bloqueada). - Logado como Administrador ou Editor: todas as proteções são desabilitadas. Você pode clicar com botão direito, copiar, etc. normalmente.
Limitações conhecidas
- Usuários avançados podem desabilitar JavaScript no navegador e burlar a proteção. Por isso, essa solução é indicada para evitar cópia acidental por usuários comuns, não para proteção absoluta.
- A tecla
Print Screennão é bloqueada (não é possível via JavaScript). O foco é evitar cópia de texto, não de imagens. - O acesso ao código-fonte pelo menu do navegador (Exibir > Código fonte) ainda é possível, mas o usuário médio não procura por isso.
Registro no caderno
Data:
Funcionalidade: Bloqueio de clique direito, seleção e atalhos
Plugins substituídos: disabled-source-disabled-right-click-and-content-protection, entre outros.