{"id":25767,"date":"2026-04-24T10:00:00","date_gmt":"2026-04-24T08:00:00","guid":{"rendered":"https:\/\/soccorsowp.it\/blog\/?p=25767"},"modified":"2026-04-24T10:00:00","modified_gmt":"2026-04-24T08:00:00","slug":"proteggere-wp-admin-password-http","status":"publish","type":"post","link":"https:\/\/soccorsowp.it\/blog\/proteggere-wp-admin-password-http\/","title":{"rendered":"Come proteggere la cartella wp-admin con password HTTP"},"content":{"rendered":"<h1>Come proteggere la cartella wp-admin con password HTTP<\/h1>\n<p>La pagina di login di <a href=\"https:\/\/soccorsowp.it\/blog\/blocco-di-contenuti-opt-in-per-wordpress\/\">WordPress<\/a> (<span style=\"font-family: monospace\">wp-login.php<\/span>) e la cartella <span style=\"font-family: monospace\">wp-admin<\/span> sono i bersagli principali degli <a href=\"https:\/\/soccorsowp.it\/blog\/cleantalk-la-soluzione-anti-spam-essenziale-per-la-sicurezza-dei-tuoi-siti-web\/\">attacchi brute force<\/a>. I bot automatizzati provano migliaia di combinazioni di username e password ogni giorno. Una protezione efficace \u00e8 aggiungere un <strong>secondo livello di autenticazione HTTP<\/strong> a livello server: prima ancora che WordPress venga caricato, il server richiede credenziali aggiuntive. In questa guida ti mostro come configurare la <strong>protezione HTTP auth su wp-admin<\/strong> con Apache e Nginx.<\/p>\n<h2>Come funziona la protezione HTTP Authentication<\/h2>\n<p>L&#8217;<strong>HTTP Basic Authentication<\/strong> \u00e8 un meccanismo del web server (non di WordPress) che richiede username e password prima di accedere a una cartella o un file specifico. Quando un visitatore o un bot tenta di accedere a <span style=\"font-family: monospace\">\/wp-admin\/<\/span> o <span style=\"font-family: monospace\">wp-login.php<\/span>, il browser mostra un popup nativo che richiede le credenziali. Se le credenziali non sono corrette, il server risponde con un errore 401 senza mai caricare PHP o WordPress.<\/p>\n<p>Questo ha due vantaggi fondamentali:<\/p>\n<ul>\n<li><strong>I bot vengono bloccati prima di PHP:<\/strong> il server rifiuta la richiesta a livello di configurazione, senza consumare risorse del server per eseguire WordPress.<\/li>\n<li><strong>Doppia autenticazione:<\/strong> anche se un attaccante scopre le credenziali WordPress, deve superare anche l&#8217;autenticazione HTTP.<\/li>\n<\/ul>\n<h2>Configurazione su Apache con .htaccess<\/h2>\n<h3>Passo 1: creare il file delle password<\/h3>\n<p>Per prima cosa, crea un file che contenga le credenziali. Questo file deve essere salvato <strong>fuori dalla document root<\/strong> per sicurezza (non accessibile dal web):<\/p>\n<pre>htpasswd -c \/home\/utente\/.htpasswd nome_utente<\/pre>\n<p>Il comando ti chieder\u00e0 di inserire e confermare la password. Il file <span style=\"font-family: monospace\">.htpasswd<\/span> conterr\u00e0 l&#8217;username e la password criptata. Se vuoi aggiungere altri utenti, usa lo stesso comando senza il flag <span style=\"font-family: monospace\">-c<\/span> (che crea il file da zero).<\/p>\n<h3>Passo 2: configurare .htaccess nella cartella wp-admin<\/h3>\n<p>Crea o modifica il file <span style=\"font-family: monospace\">.htaccess<\/span> dentro la cartella <span style=\"font-family: monospace\">wp-admin\/<\/span> (non quello nella root di WordPress):<\/p>\n<pre>AuthType Basic\nAuthName \"Area Riservata\"\nAuthUserFile \/home\/utente\/.htpasswd\nRequire valid-user<\/pre>\n<h3>Passo 3: proteggere anche wp-login.php<\/h3>\n<p>La cartella wp-admin \u00e8 protetta, ma <span style=\"font-family: monospace\">wp-login.php<\/span> si trova nella root ed \u00e8 il vero bersaglio dei bot. Aggiungi queste righe al file <span style=\"font-family: monospace\">.htaccess<\/span> nella <strong>root<\/strong> di WordPress:<\/p>\n<pre>&lt;Files wp-login.php&gt;\nAuthType Basic\nAuthName \"Area Riservata\"\nAuthUserFile \/home\/utente\/.htpasswd\nRequire valid-user\n&lt;\/Files&gt;<\/pre>\n<h2>Configurazione su Nginx<\/h2>\n<p>Su Nginx la configurazione \u00e8 diversa. Modifica il file di configurazione del virtual host:<\/p>\n<pre># Proteggere wp-admin\nlocation \/wp-admin {\n    auth_basic \"Area Riservata\";\n    auth_basic_user_file \/etc\/nginx\/.htpasswd;\n    location ~ .php$ {\n        fastcgi_pass unix:\/run\/php\/php-fpm.sock;\n        include fastcgi_params;\n    }\n}\n\n# Proteggere wp-login.php\nlocation = \/wp-login.php {\n    auth_basic \"Area Riservata\";\n    auth_basic_user_file \/etc\/nginx\/.htpasswd;\n    fastcgi_pass unix:\/run\/php\/php-fpm.sock;\n    include fastcgi_params;\n}<\/pre>\n<p>Dopo la modifica, ricarica la configurazione Nginx con <span style=\"font-family: monospace\">nginx -t &amp;&amp; systemctl reload nginx<\/span>.<\/p>\n<h2>Risolvere il problema con admin-ajax.php<\/h2>\n<p>C&#8217;\u00e8 un problema importante da gestire: WordPress usa il file <span style=\"font-family: monospace\">wp-admin\/admin-ajax.php<\/span> per le richieste AJAX del front-end (form di contatto, caricamento dinamico di contenuti, plugin che usano AJAX). Se proteggi tutta la cartella wp-admin, queste richieste AJAX vengono bloccate e alcune funzionalit\u00e0 del sito smettono di funzionare.<\/p>\n<p>La soluzione \u00e8 escludere admin-ajax.php dalla protezione. Su Apache, aggiungi nel file <span style=\"font-family: monospace\">.htaccess<\/span> della cartella wp-admin:<\/p>\n<pre>&lt;Files admin-ajax.php&gt;\n    Order allow,deny\n    Allow from all\n    Satisfy any\n&lt;\/Files&gt;<\/pre>\n<p>Su Nginx, aggiungi una location specifica prima della protezione di wp-admin:<\/p>\n<pre>location = \/wp-admin\/admin-ajax.php {\n    auth_basic off;\n    fastcgi_pass unix:\/run\/php\/php-fpm.sock;\n    include fastcgi_params;\n}<\/pre>\n<h2>Limitare l&#8217;accesso per indirizzo IP<\/h2>\n<p>Se accedi al pannello admin sempre dallo stesso indirizzo IP (ufficio, VPN), puoi limitare l&#8217;accesso a wp-admin solo a quell&#8217;IP, eliminando completamente la necessit\u00e0 di password HTTP. Su Apache:<\/p>\n<pre>&lt;Files wp-login.php&gt;\n    Order Deny,Allow\n    Deny from all\n    Allow from 123.456.789.0\n&lt;\/Files&gt;<\/pre>\n<p>Su Nginx:<\/p>\n<pre>location = \/wp-login.php {\n    allow 123.456.789.0;\n    deny all;\n    fastcgi_pass unix:\/run\/php\/php-fpm.sock;\n    include fastcgi_params;\n}<\/pre>\n<p>Questa soluzione \u00e8 la pi\u00f9 sicura in assoluto ma richiede un IP statico. Se il tuo IP cambia frequentemente, la protezione HTTP con password \u00e8 la scelta migliore.<\/p>\n<h2>Combinare con altri metodi di sicurezza<\/h2>\n<p>La protezione HTTP auth funziona al meglio quando combinata con altre misure: <strong>limitazione dei tentativi di login<\/strong> con plugin come Limit Login Attempts, <strong>autenticazione a due fattori (2FA)<\/strong> per un terzo livello di sicurezza, e <strong>username non prevedibili<\/strong> (mai &#8220;admin&#8221;). Con tutti questi livelli attivi, un attaccante dovrebbe superare l&#8217;autenticazione HTTP, indovinare l&#8217;username WordPress, la password WordPress e il codice 2FA \u2014 rendendo un attacco brute force praticamente impossibile.<\/p>\n<h2>Serve aiuto con la configurazione?<\/h2>\n<p>Se non hai familiarit\u00e0 con la configurazione del server o se vuoi proteggere il tuo sito WordPress a livello professionale, il team di <strong><a href=\"https:\/\/soccorsowp.it\/blog\/i-migliori-plugin-woocommerce-per-dominare-il-black-friday\/\">SoccorsoWP<\/a><\/strong> pu\u00f2 configurare tutti i livelli di sicurezza per te. <a href=\"https:\/\/soccorsowp.it\/ticket\/\">Apri un ticket<\/a> e blinda il tuo pannello admin.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Come proteggere la cartella wp-admin con password HTTP La pagina di login di WordPress (wp-login.php) e la cartella wp-admin sono i bersagli principali degli attacchi&#8230;<\/p>\n","protected":false},"author":1,"featured_media":25768,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_seopress_titles_title":"Come proteggere la cartella wp-admin con password HTTP","_seopress_titles_desc":"Guida per proteggere wp-admin e wp-login.php con HTTP Basic Authentication su Apache e Nginx: doppio livello di sicurezza per WordPress.","_seopress_robots_index":"","_seopress_robots_follow":"","_seopress_robots_imageindex":"","_seopress_robots_snippet":"","_seopress_robots_primary_cat":"","_seopress_robots_breadcrumbs":"","_seopress_robots_freeze_modified_date":"","_seopress_robots_custom_modified_date":"","_seopress_robots_canonical":"","_seopress_social_fb_title":"","_seopress_social_fb_desc":"","_seopress_social_fb_img":"","_seopress_social_fb_img_attachment_id":0,"_seopress_social_fb_img_width":0,"_seopress_social_fb_img_height":0,"_seopress_social_twitter_title":"","_seopress_social_twitter_desc":"","_seopress_social_twitter_img":"","_seopress_social_twitter_img_attachment_id":0,"_seopress_social_twitter_img_width":0,"_seopress_social_twitter_img_height":0,"_seopress_redirections_value":"","_seopress_redirections_enabled":"","_seopress_redirections_enabled_regex":"","_seopress_redirections_logged_status":"","_seopress_redirections_param":"","_seopress_redirections_type":0,"_seopress_analysis_target_kw":"","footnotes":""},"categories":[1700],"tags":[],"class_list":["post-25767","post","type-post","status-publish","format-standard","has-post-thumbnail","category-sicurezza-wordpress"],"_links":{"self":[{"href":"https:\/\/soccorsowp.it\/blog\/wp-json\/wp\/v2\/posts\/25767","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/soccorsowp.it\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/soccorsowp.it\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/soccorsowp.it\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/soccorsowp.it\/blog\/wp-json\/wp\/v2\/comments?post=25767"}],"version-history":[{"count":0,"href":"https:\/\/soccorsowp.it\/blog\/wp-json\/wp\/v2\/posts\/25767\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/soccorsowp.it\/blog\/wp-json\/wp\/v2\/media\/25768"}],"wp:attachment":[{"href":"https:\/\/soccorsowp.it\/blog\/wp-json\/wp\/v2\/media?parent=25767"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/soccorsowp.it\/blog\/wp-json\/wp\/v2\/categories?post=25767"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/soccorsowp.it\/blog\/wp-json\/wp\/v2\/tags?post=25767"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}