[MU] Disable Right Click & Copy Protection

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 &gt; apenas para evitar conflito com o HTML. Ao copiar, substitua ?&gt; por ?> (sem espaços). O mesmo para &lt; que deve virar <. Se preferir, use a versão corrigida disponível no repositório do projeto.

Instruções de instalação

  1. Certifique-se de que o autoloader loader.php esteja presente em /mu-plugins/ (conforme aula anterior).
  2. Crie a pasta neodoor-disable-rightclick dentro de /mu-plugins/.
  3. Dentro dela, crie o arquivo neodoor-disable-rightclick.php e cole o código (corrigindo os caracteres &lt; e &gt; conforme observação).
  4. 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. Pressione F12 – 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 Screen nã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.

Média: 3.2 (21 votos)