{"id":165,"date":"2026-01-21T07:21:38","date_gmt":"2026-01-21T06:21:38","guid":{"rendered":"https:\/\/helloblog.io\/it\/wordfence-wp-cli-abilities-api\/"},"modified":"2026-01-21T07:36:21","modified_gmt":"2026-01-21T06:36:21","slug":"wordfence-wp-cli-abilities-api","status":"publish","type":"post","link":"https:\/\/helloblog.io\/it\/wordfence-wp-cli-abilities-api\/","title":{"rendered":"Wordfence da terminale: arriva il plugin open source con comandi WP-CLI e supporto alla WordPress Abilities API"},"content":{"rendered":"\n<p>Nel panorama WordPress, Wordfence \u00e8 uno dei plugin pi\u00f9 usati per scansioni malware, firewall (WAF, Web Application Firewall) e gestione delle minacce. Il problema \u00e8 che molte operazioni quotidiane restano legate alla dashboard: se gestisci pi\u00f9 installazioni, fai manutenzione \u201cda shell\u201d, o vuoi integrare controlli in pipeline\/automation, l\u2019interfaccia web diventa un collo di bottiglia.<\/p>\n\n\n\n<p>\u00c8 qui che entra in gioco <strong>WP-CLI &#038; Abilities API for Wordfence<\/strong>: un plugin open source che porta il controllo operativo di Wordfence su <strong>WP-CLI<\/strong> (la CLI ufficiale di WordPress) e che, in parallelo, \u00e8 tra i primi a supportare la nuova <strong>WordPress Abilities API<\/strong> introdotta con WordPress 6.9. Tradotto: puoi orchestrare scansioni, firewall e issue tracking da terminale, e allo stesso tempo esporre funzionalit\u00e0 \u201cscopribili\u201d e validabili da strumenti di automazione e agenti AI.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Cosa aggiunge: namespace <code>wp wfsec<\/code> per Wordfence su WP-CLI<\/h2>\n\n\n\n<p>Il plugin introduce un nuovo namespace di comandi: <strong><code>wp wfsec<\/code><\/strong>. L\u2019obiettivo \u00e8 coprire le attivit\u00e0 operative pi\u00f9 comuni di Wordfence senza passare dall\u2019admin, mantenendo una struttura comandabile e automatizzabile.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Security Scanning (scansioni di sicurezza)<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n\n<li>Avvio di scansioni malware <strong>quick<\/strong> o <strong>full<\/strong><\/li>\n\n\n<li>Monitoraggio dello stato della scansione e avanzamento <strong>in tempo reale<\/strong><\/li>\n\n\n<li>Consultazione della <strong>scan history<\/strong> e dei <strong>log dettagliati<\/strong><\/li>\n\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Firewall Management (gestione WAF e blocchi)<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n\n<li>Blocco e sblocco di indirizzi IP<\/li>\n\n\n<li>Impostazione della <strong>durata<\/strong> del blocco e di una <strong>motivazione<\/strong> (reason)<\/li>\n\n\n<li>Verifica se uno specifico IP risulta bloccato<\/li>\n\n\n<li>Abilitazione o disabilitazione della protezione WAF<\/li>\n\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Issue Tracking (minacce e segnalazioni)<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n\n<li>Elenco di tutte le issue di sicurezza rilevate<\/li>\n\n\n<li>Filtri per stato: <strong>new<\/strong>, <strong>ignored<\/strong>, <strong>resolved<\/strong><\/li>\n\n\n<li>Eliminazione o gestione di minacce individuali<\/li>\n\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Configuration (configurazione e licenza)<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n\n<li>Lettura e scrittura delle impostazioni Wordfence<\/li>\n\n\n<li>Verifica dello stato della licenza<\/li>\n\n\n<li>Export e import della configurazione<\/li>\n\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Esempi rapidi: comandi utili per operazioni e script<\/h2>\n\n\n\n<p>Qui sotto trovi alcuni comandi rappresentativi per capire il flusso operativo. L\u2019idea \u00e8 poterli usare sia \u201ca mano\u201d in SSH, sia dentro cronjob, script di provisioning o sistemi di monitoraggio.<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#24292e\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#e1e4e8;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly># Verifica lo stato generale di Wordfence\nwp wfsec status\n\n# Avvia una scansione completa\nwp wfsec scan start --type=full\n\n# Osserva l'avanzamento della scansione\nwp wfsec scan status\n\n# Elenca tutte le issue di sicurezza\nwp wfsec issues ls --status=all\n\n# Blocca un IP per 24 ore (86400 secondi)\nwp wfsec firewall block 192.168.1.100 --duration=86400 --reason=&quot;Brute force attempt&quot;\n\n# Controlla lo stato della licenza\nwp wfsec license status\n\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark\" style=\"background-color:#24292e;color:#e1e4e8\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color:#6A737D\"># Verifica lo stato generale di Wordfence<\/span><\/span>\n<span class=\"line\"><span style=\"color:#B392F0\">wp<\/span><span style=\"color:#9ECBFF\"> wfsec<\/span><span style=\"color:#9ECBFF\"> status<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color:#6A737D\"># Avvia una scansione completa<\/span><\/span>\n<span class=\"line\"><span style=\"color:#B392F0\">wp<\/span><span style=\"color:#9ECBFF\"> wfsec<\/span><span style=\"color:#9ECBFF\"> scan<\/span><span style=\"color:#9ECBFF\"> start<\/span><span style=\"color:#79B8FF\"> --type=full<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color:#6A737D\"># Osserva l'avanzamento della scansione<\/span><\/span>\n<span class=\"line\"><span style=\"color:#B392F0\">wp<\/span><span style=\"color:#9ECBFF\"> wfsec<\/span><span style=\"color:#9ECBFF\"> scan<\/span><span style=\"color:#9ECBFF\"> status<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color:#6A737D\"># Elenca tutte le issue di sicurezza<\/span><\/span>\n<span class=\"line\"><span style=\"color:#B392F0\">wp<\/span><span style=\"color:#9ECBFF\"> wfsec<\/span><span style=\"color:#9ECBFF\"> issues<\/span><span style=\"color:#9ECBFF\"> ls<\/span><span style=\"color:#79B8FF\"> --status=all<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color:#6A737D\"># Blocca un IP per 24 ore (86400 secondi)<\/span><\/span>\n<span class=\"line\"><span style=\"color:#B392F0\">wp<\/span><span style=\"color:#9ECBFF\"> wfsec<\/span><span style=\"color:#9ECBFF\"> firewall<\/span><span style=\"color:#9ECBFF\"> block<\/span><span style=\"color:#79B8FF\"> 192.168.1.100<\/span><span style=\"color:#79B8FF\"> --duration=86400<\/span><span style=\"color:#79B8FF\"> --reason=<\/span><span style=\"color:#9ECBFF\">\"Brute force attempt\"<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color:#6A737D\"># Controlla lo stato della licenza<\/span><\/span>\n<span class=\"line\"><span style=\"color:#B392F0\">wp<\/span><span style=\"color:#9ECBFF\"> wfsec<\/span><span style=\"color:#9ECBFF\"> license<\/span><span style=\"color:#9ECBFF\"> status<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p>Un dettaglio importante per chi automatizza: <strong>tutti i comandi supportano <code>--format=json<\/code><\/strong>, quindi puoi serializzare l\u2019output e gestirlo in modo robusto con <code>jq<\/code>, in un runner CI, o in qualsiasi tool di orchestrazione.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">La parte davvero interessante: supporto alla WordPress Abilities API (WP 6.9+)<\/h2>\n\n\n\n<p>WP-CLI \u00e8 gi\u00e0 un enorme salto di qualit\u00e0 per chi lavora da terminale. Ma questo plugin fa un passo in pi\u00f9 perch\u00e9 implementa la <strong>WordPress Abilities API<\/strong>: una nuova interfaccia standard (introdotta in WordPress 6.9) che consente ad agenti AI e strumenti di automazione di <strong>scoprire<\/strong> e <strong>invocare<\/strong> funzionalit\u00e0 di WordPress tramite un\u2019API auto-descrittiva e con schema validato.<\/p>\n\n\n\n<p>In pratica, invece di costruire integrazioni ad hoc, puoi esporre capacit\u00e0 (abilities) ben definite che un agente pu\u00f2 enumerare e utilizzare senza \u201cconoscere\u201d in anticipo i dettagli interni del plugin. L\u2019approccio \u00e8 pensato per ridurre l\u2019attrito nell\u2019automazione: dashboard custom, monitoraggio security-driven, routine di hardening, e controlli periodici gestiti da tool esterni.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Le 7 abilit\u00e0 esposte dal plugin<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n\n<li><strong>scan-status<\/strong> &#8211; recupera lo stato corrente della scansione e l\u2019avanzamento<\/li>\n\n\n<li><strong>scan-start<\/strong> &#8211; avvia scansioni di sicurezza in modo programmatico<\/li>\n\n\n<li><strong>issues-list<\/strong> &#8211; ottiene la lista delle issue rilevate<\/li>\n\n\n<li><strong>issues-count<\/strong> &#8211; restituisce il conteggio delle issue per severit\u00e0<\/li>\n\n\n<li><strong>firewall-status<\/strong> &#8211; verifica lo stato del WAF<\/li>\n\n\n<li><strong>firewall-block<\/strong> &#8211; blocca IP via API<\/li>\n\n\n<li><strong>license-status<\/strong> &#8211; interroga le informazioni di licenza<\/li>\n\n<\/ul>\n\n\n\n<p>Il risultato \u00e8 un set di funzionalit\u00e0 \u201ca grana grossa\u201d ma estremamente pratiche: puoi costruire monitoraggi AI-powered, integrare Wordfence in una console operativa interna, o delegare a tool automatici controlli ricorrenti (ad esempio: avviare una scansione completa fuori orario e verificare che il WAF sia attivo).<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Autenticazione: Application Passwords + Basic Auth<\/h3>\n\n\n\n<p>Per l\u2019accesso, l\u2019implementazione usa le <strong>WordPress Application Passwords<\/strong> tramite <strong>Basic Auth<\/strong>. Le Application Passwords sono credenziali dedicate (separate dalla password principale) pensate proprio per integrazioni e automazioni: un\u2019impostazione sensata quando vuoi far parlare sistemi esterni con WordPress in modo controllato.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Requisiti tecnici<\/h2>\n\n\n\n<p>Prima di installare, verifica questi requisiti (sono vincolanti, soprattutto per la parte Abilities API):<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n\n<li>WordPress <strong>6.9+<\/strong><\/li>\n\n\n<li>PHP <strong>8.0+<\/strong><\/li>\n\n\n<li>WP-CLI <strong>2.5+<\/strong><\/li>\n\n\n<li>Plugin <strong>Wordfence Security<\/strong> (free o premium)<\/li>\n\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Download e installazione<\/h2>\n\n\n\n<p>Puoi scaricare l\u2019ultima versione rilasciata e caricarla nella directory dei plugin (<code>\/wp-content\/plugins\/<\/code>).<\/p>\n\n\n<a href=\"https:\/\/github.com\/trueqap\/wpcli-for-wordfence\/releases\/download\/v1.0.0\/wpcli-for-wordfence-1.0.0.zip\" class=\"download-card\" download>\n                <span class=\"download-icon\"><i class=\"fa-duotone fa-file-zipper\"><\/i><\/span>\n                <span class=\"download-info\">\n                    <span class=\"download-title\">Download WP CLI for Wordfence v1.0.0<\/span>\n                    <span class=\"download-meta\"><span class=\"download-filename\">wpcli-for-wordfence-1.0.0.zip<\/span><\/span>\n                <\/span>\n                <span class=\"download-action\"><i class=\"fa-duotone fa-arrow-down-to-line\"><\/i><\/span>\n            <\/a>\n\n\n<p>In alternativa, \u00e8 disponibile anche l\u2019installazione via Composer in setup stile Bedrock (utile se gestisci WordPress come progetto PHP con dipendenze versionate).<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Quando ha senso usarlo (davvero)<\/h2>\n\n\n\n<p>Questo plugin brilla soprattutto in tre scenari: (1) gestione di pi\u00f9 siti WordPress dove vuoi un set di comandi uniformi per controlli e remediation; (2) manutenzione e incident response via SSH, dove aprire l\u2019admin non \u00e8 la strada pi\u00f9 rapida; (3) automazione avanzata, perch\u00e9 l\u2019output JSON e l\u2019Abilities API rendono pi\u00f9 semplice integrare Wordfence in processi esterni senza incollare insieme endpoint custom e parsing fragile.<\/p>\n\n\n\n<p>Se lavori con Wordfence ogni giorno, l\u2019idea di poter avviare scansioni, verificare il WAF, estrarre issue e bloccare IP direttamente da terminale (e, in prospettiva, farlo fare a tool automatici standardizzati) \u00e8 un cambio di passo notevole.<\/p>\n\n\n<div class=\"references-section\">\n                <h2>Riferimenti \/ Fonti<\/h2>\n                <ul class=\"references-list\"><li><a href=\"https:\/\/github.com\/trueqap\/wpcli-for-wordfence\" target=\"_blank\" rel=\"noopener noreferrer\">WP-CLI &amp; Abilities API for Wordfence: Manage Security from Terminal and AI Agents<\/a><\/li><li><a href=\"https:\/\/github.com\/trueqap\/wpcli-for-wordfence\/releases\/download\/v1.0.0\/wpcli-for-wordfence-1.0.0.zip\" target=\"_blank\" rel=\"noopener noreferrer\">Download WP CLI for Wordfence v1.0.0<\/a><\/li><\/ul>\n            <\/div>","protected":false},"excerpt":{"rendered":"<p>Gestire Wordfence dall\u2019admin va bene\u2026 finch\u00e9 non devi operare su decine di siti o automatizzare controlli ricorrenti. Questo plugin open source aggiunge un set completo di comandi WP-CLI e, soprattutto, espone abilit\u00e0 standardizzate via Abilities API (WP 6.9+) pensate anche per agenti AI e tool di automazione.<\/p>\n","protected":false},"author":18,"featured_media":166,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[16],"tags":[46,11,15,10,7],"class_list":["post-165","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-ecosistema-wordpress","tag-api","tag-sicurezza","tag-wordfence","tag-wordpress","tag-wp-cli"],"_links":{"self":[{"href":"https:\/\/helloblog.io\/it\/wp-json\/wp\/v2\/posts\/165","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/helloblog.io\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/helloblog.io\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/helloblog.io\/it\/wp-json\/wp\/v2\/users\/18"}],"replies":[{"embeddable":true,"href":"https:\/\/helloblog.io\/it\/wp-json\/wp\/v2\/comments?post=165"}],"version-history":[{"count":1,"href":"https:\/\/helloblog.io\/it\/wp-json\/wp\/v2\/posts\/165\/revisions"}],"predecessor-version":[{"id":167,"href":"https:\/\/helloblog.io\/it\/wp-json\/wp\/v2\/posts\/165\/revisions\/167"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/helloblog.io\/it\/wp-json\/wp\/v2\/media\/166"}],"wp:attachment":[{"href":"https:\/\/helloblog.io\/it\/wp-json\/wp\/v2\/media?parent=165"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/helloblog.io\/it\/wp-json\/wp\/v2\/categories?post=165"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/helloblog.io\/it\/wp-json\/wp\/v2\/tags?post=165"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}