{"id":242,"date":"2026-05-13T09:00:54","date_gmt":"2026-05-13T12:00:54","guid":{"rendered":"http:\/\/neodoor.neo\/?p=242"},"modified":"2026-05-21T09:02:17","modified_gmt":"2026-05-21T12:02:17","slug":"copy-protection","status":"publish","type":"post","link":"https:\/\/www.portanova.com.br\/notebook\/copy-protection\/","title":{"rendered":"[MU] Disable Right Click &amp; Copy Protection"},"content":{"rendered":"<h2>Aula: Prote\u00e7\u00e3o de conte\u00fado com MU-Plugin \u2013 Desabilitar clique direito, c\u00f3pia e atalhos<\/h2>\n<p><strong>Objetivo:<\/strong> Substituir plugins de prote\u00e7\u00e3o de conte\u00fado (como <code>disabled-source-disabled-right-click-and-content-protection<\/code>) por um MU-Plugin enxuto, que bloqueia clique direito, sele\u00e7\u00e3o de texto, teclas de atalho (Ctrl+C, Ctrl+U, F12, etc.) e ainda libera totalmente Administradores e Editores.<\/p>\n<p><strong>Contexto:<\/strong> Muitos sites usam plugins pesados para evitar c\u00f3pia de conte\u00fado. Vamos criar uma solu\u00e7\u00e3o pr\u00f3pria, com c\u00f3digo limpo, que n\u00e3o sobrecarrega o banco de dados e \u00e9 f\u00e1cil de manter.<\/p>\n<h3>C\u00f3digo do MU-Plugin<\/h3>\n<p>Crie a pasta <code>wp-content\/mu-plugins\/neodoor-disable-rightclick\/<\/code> e dentro dela o arquivo <code>neodoor-disable-rightclick.php<\/code> com o conte\u00fado abaixo:<\/p>\n<pre><code>&lt;?php\n\/**\n * Plugin Name:  Neodoor Disable Right Click &amp; Copy Protection\n * Description:  Bloqueia clique direito, sele\u00e7\u00e3o de texto, printscreen (c\u00f3pia) e atalhos do navegador, mas libera para Administradores e Editores.\n * Version:      1.0\n * Author:       Reinaldo (Neodoor.neo)\n *\/\n\nif ( ! defined( 'ABSPATH' ) ) {\n    exit;\n}\n\nclass Neodoor_Disable_RightClick {\n\n    private static $instance = null;\n\n    public static function get_instance() {\n        if ( null === self::$instance ) {\n            self::$instance = new self();\n        }\n        return self::$instance;\n    }\n\n    private function __construct() {\n        add_action( 'wp_enqueue_scripts', [ $this, 'add_protection_script' ] );\n    }\n\n    \/**\n     * Verifica se o usu\u00e1rio atual \u00e9 Administrador ou Editor.\n     *\/\n    private function user_has_full_access() {\n        if ( is_user_logged_in() ) {\n            $user = wp_get_current_user();\n            $allowed_roles = [ 'administrator', 'editor' ];\n            if ( array_intersect( $allowed_roles, (array) $user-&gt;roles ) ) {\n                return true;\n            }\n        }\n        return false;\n    }\n\n    public function add_protection_script() {\n        if ( $this-&gt;user_has_full_access() ) {\n            return; \/\/ Libera total para admins\/editores\n        }\n\n        add_action( 'wp_head', [ $this, 'output_protection_js' ] );\n        add_action( 'wp_head', [ $this, 'output_protection_css' ] );\n    }\n\n    public function output_protection_js() {\n        ?&gt;\n        &lt;script&gt;\n            (function() {\n                \/\/ Bloquear clique direito\n                document.addEventListener('contextmenu', function(e) {\n                    e.preventDefault();\n                    return false;\n                });\n\n                \/\/ Bloquear sele\u00e7\u00e3o de texto\n                document.addEventListener('selectstart', function(e) {\n                    e.preventDefault();\n                    return false;\n                });\n\n                \/\/ Bloquear copiar, cortar, colar\n                document.addEventListener('copy', function(e) {\n                    e.preventDefault();\n                    return false;\n                });\n                document.addEventListener('cut', function(e) {\n                    e.preventDefault();\n                    return false;\n                });\n                document.addEventListener('paste', function(e) {\n                    e.preventDefault();\n                    return false;\n                });\n\n                \/\/ Bloquear teclas de atalho\n                document.addEventListener('keydown', function(e) {\n                    \/\/ Ctrl+U (ver fonte)\n                    if (e.ctrlKey &amp;&amp; e.key === 'u') {\n                        e.preventDefault();\n                        return false;\n                    }\n                    \/\/ Ctrl+C \/ Ctrl+X\n                    if (e.ctrlKey &amp;&amp; (e.key === 'c' || e.key === 'x')) {\n                        e.preventDefault();\n                        return false;\n                    }\n                    \/\/ Ctrl+S (salvar)\n                    if (e.ctrlKey &amp;&amp; e.key === 's') {\n                        e.preventDefault();\n                        return false;\n                    }\n                    \/\/ F12 (DevTools)\n                    if (e.key === 'F12') {\n                        e.preventDefault();\n                        return false;\n                    }\n                    \/\/ Ctrl+Shift+I, Ctrl+Shift+J, Ctrl+Shift+C\n                    if (e.ctrlKey &amp;&amp; e.shiftKey &amp;&amp; (e.key === 'I' || e.key === 'J' || e.key === 'C')) {\n                        e.preventDefault();\n                        return false;\n                    }\n                    \/\/ Ctrl+Shift+K (Firefox)\n                    if (e.ctrlKey &amp;&amp; e.shiftKey &amp;&amp; e.key === 'K') {\n                        e.preventDefault();\n                        return false;\n                    }\n                });\n\n                \/\/ Prevenir arraste de imagens\n                document.querySelectorAll('img').forEach(function(img) {\n                    img.addEventListener('dragstart', function(e) {\n                        e.preventDefault();\n                        return false;\n                    });\n                });\n            })();\n        &lt;\/script&gt;\n        &lt;?php\n    }\n\n    public function output_protection_css() {\n        ?&gt;\n        &lt;style&gt;\n            body {\n                -webkit-user-select: none;\n                -moz-user-select: none;\n                -ms-user-select: none;\n                user-select: none;\n            }\n            img {\n                -webkit-user-drag: none;\n                user-drag: none;\n            }\n            a, button, input, textarea {\n                user-select: text; \/* Permite selecionar dentro de campos de formul\u00e1rio *\/\n            }\n        &lt;\/style&gt;\n        &lt;?php\n    }\n}\n\nNeodoor_Disable_RightClick::get_instance();\n<\/code><\/pre>\n<p><strong>Observa\u00e7\u00e3o importante:<\/strong> No c\u00f3digo acima, a tag <code>?&gt;<\/code> dentro do m\u00e9todo <code>output_protection_js<\/code> est\u00e1 escrita com <code>&amp;gt;<\/code> apenas para evitar conflito com o HTML. Ao copiar, substitua <code>?&amp;gt;<\/code> por <code>?&gt;<\/code> (sem espa\u00e7os). O mesmo para <code>&amp;lt;<\/code> que deve virar <code>&lt;<\/code>. Se preferir, use a vers\u00e3o corrigida dispon\u00edvel no reposit\u00f3rio do projeto.<\/p>\n<h3>Instru\u00e7\u00f5es de instala\u00e7\u00e3o<\/h3>\n<ol>\n<li>Certifique-se de que o autoloader <code>loader.php<\/code> esteja presente em <code>\/mu-plugins\/<\/code> (conforme aula anterior).<\/li>\n<li>Crie a pasta <code>neodoor-disable-rightclick<\/code> dentro de <code>\/mu-plugins\/<\/code>.<\/li>\n<li>Dentro dela, crie o arquivo <code>neodoor-disable-rightclick.php<\/code> e cole o c\u00f3digo (corrigindo os caracteres <code>&amp;lt;<\/code> e <code>&amp;gt;<\/code> conforme observa\u00e7\u00e3o).<\/li>\n<li>Desative e remova qualquer plugin similar (ex: <code>disabled-source-disabled-right-click-and-content-protection<\/code>).<\/li>\n<\/ol>\n<h3>Teste<\/h3>\n<ul>\n<li><strong>Visitante (n\u00e3o logado):<\/strong> tente clicar com bot\u00e3o direito \u2013 n\u00e3o deve abrir menu. Tente selecionar texto \u2013 n\u00e3o ser\u00e1 poss\u00edvel. Pressione <code>Ctrl+U<\/code> \u2013 a fonte da p\u00e1gina n\u00e3o abre. Pressione <code>F12<\/code> \u2013 o DevTools pode n\u00e3o abrir (em alguns navegadores ainda abre, mas a tecla de atalho \u00e9 bloqueada).<\/li>\n<li><strong>Logado como Administrador ou Editor:<\/strong> todas as prote\u00e7\u00f5es s\u00e3o desabilitadas. Voc\u00ea pode clicar com bot\u00e3o direito, copiar, etc. normalmente.<\/li>\n<\/ul>\n<h3>Limita\u00e7\u00f5es conhecidas<\/h3>\n<ul>\n<li>Usu\u00e1rios avan\u00e7ados podem desabilitar JavaScript no navegador e burlar a prote\u00e7\u00e3o. Por isso, essa solu\u00e7\u00e3o \u00e9 indicada para evitar c\u00f3pia acidental por usu\u00e1rios comuns, n\u00e3o para prote\u00e7\u00e3o absoluta.<\/li>\n<li>A tecla <code>Print Screen<\/code> n\u00e3o \u00e9 bloqueada (n\u00e3o \u00e9 poss\u00edvel via JavaScript). O foco \u00e9 evitar c\u00f3pia de texto, n\u00e3o de imagens.<\/li>\n<li>O acesso ao c\u00f3digo-fonte pelo menu do navegador (Exibir &gt; C\u00f3digo fonte) ainda \u00e9 poss\u00edvel, mas o usu\u00e1rio m\u00e9dio n\u00e3o procura por isso.<\/li>\n<\/ul>\n<h3>Registro no caderno<\/h3>\n<p>Data: <\/p>\n<p>Funcionalidade: Bloqueio de clique direito, sele\u00e7\u00e3o e atalhos<\/p>\n<p>Plugins substitu\u00eddos: disabled-source-disabled-right-click-and-content-protection, entre outros.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Aula: Prote\u00e7\u00e3o de conte\u00fado com MU-Plugin \u2013 Desabilitar clique direito, c\u00f3pia e atalhos Objetivo: Substituir plugins de prote\u00e7\u00e3o de conte\u00fado (como disabled-source-disabled-right-click-and-content-protection) por um MU-Plugin enxuto, que bloqueia clique direito, sele\u00e7\u00e3o 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 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[2,4],"tags":[],"class_list":["post-242","post","type-post","status-publish","format-standard","hentry","category-lessons","category-pluginsmu"],"_links":{"self":[{"href":"https:\/\/www.portanova.com.br\/notebook\/wp-json\/wp\/v2\/posts\/242","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.portanova.com.br\/notebook\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.portanova.com.br\/notebook\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.portanova.com.br\/notebook\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.portanova.com.br\/notebook\/wp-json\/wp\/v2\/comments?post=242"}],"version-history":[{"count":0,"href":"https:\/\/www.portanova.com.br\/notebook\/wp-json\/wp\/v2\/posts\/242\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.portanova.com.br\/notebook\/wp-json\/wp\/v2\/media?parent=242"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.portanova.com.br\/notebook\/wp-json\/wp\/v2\/categories?post=242"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.portanova.com.br\/notebook\/wp-json\/wp\/v2\/tags?post=242"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}