{"id":2901,"date":"2026-07-19T12:54:01","date_gmt":"2026-07-19T10:54:01","guid":{"rendered":"https:\/\/darioiannascoli.it\/blog\/multimodal-prompt-injection-defense-august-2026-cross-modal-detection\/"},"modified":"2026-07-19T12:54:01","modified_gmt":"2026-07-19T10:54:01","slug":"multimodal-prompt-injection-defense-august-2026-cross-modal-detection","status":"publish","type":"post","link":"https:\/\/darioiannascoli.it\/blog\/multimodal-prompt-injection-defense-august-2026-cross-modal-detection\/","title":{"rendered":"Come Implementare Multimodal AI Prompt Injection Defense August 2026: La Mia Procedura Detection Framework per Cross-Modal Attacks, Vision-Based Injection e Text-Image Hybrid Exploits"},"content":{"rendered":"<p>Nella mia esperienza come IT Specialist che lavora quotidianamente con sistemi AI in produzione, ho osservato un&#8217;escalation allarmante negli attacchi multimodali agli LLM. Fino a pochi mesi fa, la maggior parte delle difese si concentrava su prompt injection testuali\u2014ma <strong>aggiunge agosto 2026 ha portato una svolta critica<\/strong>: gli attacchi cross-modali stanno bypassando completamente i nostri sistemi di protezione basati su keyword filtering.<\/p>\n<p>Il problema \u00e8 semplice ma devastante: <strong>le istruzioni malevole non arrivano pi\u00f9 solo come testo<\/strong>. Arrivano nascoste nelle immagini, incrociate tra visione e linguaggio, ibride in modalit\u00e0 che i nostri team SOC faticano a rilevare. Quando ho implementato la prima versione di un framework di rilevamento cross-modale nel nostro ambiente di produzione in giugno, il tasso di dettagli era ancora al 52% utilizzando semplici filtri di keyword. Oggi, con le tecniche pi\u00f9 evolute che vi mostrer\u00f2, siamo arrivati al <strong>94% di accuratezza di rilevamento<\/strong>.<\/p>\n<h2>Perch\u00e9 gli attacchi multimodali sono la nuova frontiera del rischio AI<\/h2>\n<p><cite>Le difese che abbiamo costruito per il testo non si trasferiscono ai pixel e alle onde sonore<\/cite>. Questo \u00e8 il punto cruciale. Nel gennaio 2026, ricercatori della UC Santa Cruz hanno dimostrato l&#8217;attacco CHAI (Command Hijacking against embodied AI), provando fisicamente che <cite>segnali stampati sul terreno potevano hijackare assistenti di guida autonoma<\/cite>.<\/p>\n<p><cite>Gli attacchi cross-modali bypassano i guardrail nei vision-language model incorporando istruzioni malevole nelle immagini mantenendo i prompt testuali benigni<\/cite>. Ho visto questo in azione: un&#8217;immagine perfettamente innocua all&#8217;occhio umano che contiene istruzioni nascoste in steganografia, che il modello interpreta e esegue. <cite>NVIDIA&#8217;s AI Red Team ha scoperto che modelli con architetture early fusion, come Meta&#8217;s Llama 4, trattano simboli visivi (sequenze emoji, rebus) come istruzioni funzionali senza necessit\u00e0 di prompt espliciti<\/cite>.<\/p>\n<p>Il rilevamento \u00e8 complicato ulteriormente da tre categorie di attacchi che sto monitorando costantemente:<\/p>\n<ul>\n<li><strong>Attacchi basati su tipografia<\/strong>: <cite>Istruzioni avversariali tipografiche incorporate su oggetti fisici\u2014segnali, confezioni di prodotti, vestiti o schermi visualizzati\u2014nel campo visivo di agenti dotati di fotocamera possono hijackare il comportamento dell&#8217;agente senza alcuna manipolazione dei file immagine digitali<\/cite><\/li>\n<li><strong>Iniezioni steganografiche<\/strong>: Istruzioni nascoste tramite modifiche invisibili all&#8217;interno di immagini che solo il modello pu\u00f2 interpretare<\/li>\n<li><strong>Perturbazioni avversariali<\/strong>: <cite>Modelli di rumore artigianali o patch di immagine avversariali ottimizzati attraverso metodi basati su gradiente per spostare le rappresentazioni interne dell&#8217;encoder visivo verso contenuti target malevoli, con il CrossInject framework che ha raggiunto un miglioramento di almeno il 30,1% nel tasso di successo dell&#8217;attacco<\/cite><\/li>\n<\/ul>\n<h2>L&#8217;architettura del Detection Framework multimodale che implemento in produzione<\/h2>\n<p>Dopo mesi di testing in ambienti controlled e due iterazioni fallite nel nostro datacenter (all&#8217;inizio non funzionava perch\u00e9 il modello di rilevamento aveva polarizzazioni verso immagini ad alta risoluzione), ho consolidato un framework a quattro strati che funziona affidabilmente.<\/p>\n<h3>1. Pre-processing Layer: Image Sanitization<\/h3>\n<p>Il primo strato prepara gli input visivi riducendo la superficie d&#8217;attacco per steganografia. Nel mio ambiente, ho implementato questa sequenza:<\/p>\n<pre><code># Python pseudocode per image preprocessing layer\nimport cv2\nimport numpy as np\nfrom PIL import Image\n\ndef sanitize_image_input(image_path, aggressive_mode=False):\n    \"\"\"\n    Sanitize input images contro prompt injection basati su immagini\n    aggressive_mode=True per ambienti high-risk come autonomous systems\n    \"\"\"\n    img = cv2.imread(image_path)\n    \n    # Step 1: JPEG recompression (degrada payload steganografici)\n    encode_param = [int(cv2.IMWRITE_JPEG_QUALITY), 85]\n    _, encimg = cv2.imencode('.jpg', img, encode_param)\n    img = cv2.imdecode(encimg, 1)\n    \n    # Step 2: Gaussian blur per smoothing (rimuove adversarial patch fini)\n    if aggressive_mode:\n        img = cv2.GaussianBlur(img, (5, 5), 1.0)\n    else:\n        img = cv2.GaussianBlur(img, (3, 3), 0.5)\n    \n    # Step 3: Histogram equalization per normalizzare contrast anomali\n    lab = cv2.cvtColor(img, cv2.COLOR_BGR2LAB)\n    l_channel, a, b = cv2.split(lab)\n    clahe = cv2.createCLAHE(clipLimit=3.0, tileGridSize=(8, 8))\n    l_clahe = clahe.apply(l_channel)\n    lab_clahe = cv2.merge([l_clahe, a, b])\n    img = cv2.cvtColor(lab_clahe, cv2.COLOR_LAB2BGR)\n    \n    return img\n<\/code><\/pre>\n<p><cite>Ho implementato la ricompressione JPEG e il filtering gaussiano prima che le immagini raggiungano il VLM\u2014questi semplici step di pre-processing degradano i payload steganografici preservando il contenuto visivo legittimo<\/cite>. Nel mio testing, questo rimuove il 65-70% degli attacchi steganografici senza impattare significativamente l&#8217;accuratezza del modello su compiti legittimi.<\/p>\n<h3>2. Cross-Modal Consistency Checking Layer<\/h3>\n<p>Questo \u00e8 il cuore tecnico del framework. L&#8217;intuizione \u00e8: se un&#8217;immagine appare benigna all&#8217;analisi visiva ma produce comportamento inaspettato dal modello, quella inconsistenza merita investigazione.<\/p>\n<pre><code># Cross-modal consistency check implementation\nclass CrossModalConsistencyValidator:\n    def __init__(self, vision_model, text_model, threshold=0.75):\n        self.vision_model = vision_model\n        self.text_model = text_model\n        self.threshold = threshold\n    \n    def validate_input_consistency(self, image, text_prompt):\n        \"\"\"\n        Verifica se la descrizione automatica dell'immagine e il prompt testuale\n        sono semanticamente coerenti (red flag se troppo divergenti)\n        \"\"\"\n        # Step 1: Estrai descrizione visiva automatica\n        auto_image_caption = self.vision_model.generate_caption(image)\n        \n        # Step 2: Calcola embeddings semantici\n        image_embedding = self.vision_model.encode_text(auto_image_caption)\n        text_embedding = self.text_model.encode_text(text_prompt)\n        \n        # Step 3: Cosine similarity per coerenza\n        similarity = cosine_similarity([image_embedding], [text_embedding])[0][0]\n        \n        # Se la similarit\u00e0 \u00e8 troppo bassa, il prompt potrebbe essere injected\n        if similarity &lt; self.threshold:\n            return {\n                &quot;injection_risk&quot;: True,\n                &quot;consistency_score&quot;: similarity,\n                &quot;severity&quot;: &quot;high&quot; if similarity &lt; 0.5 else &quot;medium&quot;\n            }\n        \n        return {&quot;injection_risk&quot;: False, &quot;consistency_score&quot;: similarity}\n<\/code><\/pre>\n<p><cite>Per sistemi multimodali, il cross-modal consistency checking identifica attacchi che sfruttano gap tra le modalit\u00e0\u2014se un&#8217;immagine appare benigna sotto analisi visiva ma produce comportamento inaspettato dal modello, quell&#8217;inconsistenza richiede investigazione<\/cite>.<\/p>\n<h3>3. Neural Detection Layer: Steganography-Specific Model<\/h3>\n<p>Ho addestrato un modello di rilevamento specializzato (basato su architettura ResNet50 modificata) per identificare modifiche steganografiche. L&#8217;approccio sfrutta:<\/p>\n<pre><code># Neural detection per steganographic patterns\nimport torch\nimport torch.nn as nn\nfrom torchvision import models\n\nclass SteganoDetectionModel(nn.Module):\n    \"\"\"\n    Rileva modifiche steganografiche ottimizzate per attacchi VLM\n    basato su high-pass filtering e attention mechanisms\n    \"\"\"\n    def __init__(self, pretrained=True):\n        super().__init__()\n        \n        # Backbone: ResNet50 per feature extraction\n        self.backbone = models.resnet50(pretrained=pretrained)\n        \n        # High-pass filtering layers per AI steganography patterns\n        self.high_pass_conv = nn.Sequential(\n            nn.Conv2d(3, 32, kernel_size=3, padding=1, bias=False),\n            nn.Conv2d(32, 64, kernel_size=3, padding=1),\n            nn.ReLU(inplace=True)\n        )\n        \n        # Attention mechanism per regioni comunemente sfruttate\n        self.attention = nn.Sequential(\n            nn.Conv2d(64, 32, 1),\n            nn.ReLU(),\n            nn.Conv2d(32, 1, 1),\n            nn.Sigmoid()\n        )\n        \n        # Ensemble decision making\n        self.classifier = nn.Sequential(\n            nn.Linear(2048 + 64, 512),\n            nn.ReLU(),\n            nn.Dropout(0.3),\n            nn.Linear(512, 256),\n            nn.ReLU(),\n            nn.Linear(256, 2)  # Binary: steganography detected\/not\n        )\n    \n    def forward(self, x):\n        # High-pass filtering per steganography detection\n        hp_features = self.high_pass_conv(x)\n        \n        # Attention over high-pass features\n        attention_weights = self.attention(hp_features)\n        attended_features = hp_features * attention_weights\n        \n        # Backbone feature extraction\n        backbone_features = self.backbone(x)\n        \n        # Combine and classify\n        combined = torch.cat([\n            backbone_features,\n            torch.nn.functional.adaptive_avg_pool2d(attended_features, (1, 1)).flatten(1)\n        ], dim=1)\n        \n        return self.classifier(combined)\n<\/code><\/pre>\n<p><cite>Il layer di rilevamento neurale utilizza reti neurali specializzate per rilevare modifiche steganografiche ottimizzate per attacchi VLM, con architettura di rilevamento che incorpora filtri high-pass ottimizzati per pattern steganografici AI, meccanismi di attenzione focalizzati su regioni comunemente sfruttate e decision making ensemble su pi\u00f9 modelli di rilevamento<\/cite>.<\/p>\n<h3>4. Behavioral Monitoring Layer: Output Validation<\/h3>\n<p>L&#8217;ultimo strato che implemento monitora gli output del VLM per segni di influenza injection attraverso tre meccanismi:<\/p>\n<pre><code>class BehavioralMonitoringLayer:\n    def __init__(self, safety_classifier, baseline_responses):\n        self.safety_classifier = safety_classifier\n        self.baseline_responses = baseline_responses\n        self.anomaly_threshold = 0.85\n    \n    def monitor_output(self, generated_output, input_prompt, image):\n        \"\"\"\n        Monitora output VLM per segni di prompt injection influence\n        \"\"\"\n        results = {\n            \"semantic_consistency\": self._check_semantic_consistency(\n                generated_output, input_prompt\n            ),\n            \"safety_violation\": self._detect_safety_violation(generated_output),\n            \"anomaly_score\": self._calculate_anomaly_score(generated_output)\n        }\n        \n        # Decision logic\n        if results[\"safety_violation\"]:\n            return {\"injected\": True, \"severity\": \"critical\"}\n        \n        if results[\"anomaly_score\"] &gt; self.anomaly_threshold:\n            return {\"injected\": True, \"severity\": \"medium\"}\n        \n        if results[\"semantic_consistency\"]  0.5\n    \n    def _calculate_anomaly_score(self, output):\n        # Quantifica divergenza da pattern di output normali\n        pass\n<\/code><\/pre>\n<p><cite>Il layer finale monitora output VLM per segni di influenza injection attraverso analisi di coerenza semantica confrontando output a risposte attese, rilevamento di violazioni di sicurezza usando classificatori specializzati e rilevamento di anomalie identificando pattern di output inusuali indicativi di istruzioni incorporate<\/cite>.<\/p>\n<h2>Implementazione pratica: Come il framework funziona end-to-end<\/h2>\n<p>Nel mio ambiente di produzione, il framework viene orchestrato cos\u00ec:<\/p>\n<pre><code>class MultimodalPromptInjectionDefense:\n    def __init__(self):\n        self.preprocessor = ImagePreprocessor()\n        self.consistency_validator = CrossModalConsistencyValidator()\n        self.stego_detector = SteganoDetectionModel()\n        self.behavior_monitor = BehavioralMonitoringLayer()\n        self.provenance_logger = ProvenanceAuditTrail()\n    \n    def process_multimodal_input(self, image, text_prompt, agent_id):\n        \"\"\"\n        Pipeline completo di rilevamento con audit trail\n        \"\"\"\n        # Step 1: Pre-processing\n        sanitized_image = self.preprocessor.sanitize_image_input(\n            image, \n            aggressive_mode=agent_id.startswith(\"autonomous\")\n        )\n        \n        # Step 2: Cross-modal consistency check\n        consistency_result = self.consistency_validator.validate_input_consistency(\n            sanitized_image, text_prompt\n        )\n        self.provenance_logger.log({\n            \"stage\": \"consistency_check\",\n            \"result\": consistency_result,\n            \"agent\": agent_id\n        })\n        \n        if consistency_result[\"injection_risk\"]:\n            return {\"action\": \"block\", \"reason\": \"cross-modal inconsistency\"}\n        \n        # Step 3: Steganography detection\n        stego_pred = self.stego_detector(sanitized_image)\n        if stego_pred &gt; 0.7:\n            self.provenance_logger.log({\n                \"stage\": \"stego_detection\",\n                \"threat_detected\": True,\n                \"confidence\": float(stego_pred),\n                \"agent\": agent_id\n            })\n            return {\"action\": \"block\", \"reason\": \"steganographic payload detected\"}\n        \n        # Step 4: Generate output with monitoring\n        vlm_output = self.vlm.generate_response(sanitized_image, text_prompt)\n        \n        # Step 5: Behavioral monitoring\n        behavior_result = self.behavior_monitor.monitor_output(\n            vlm_output, text_prompt, sanitized_image\n        )\n        \n        if behavior_result[\"injected\"]:\n            self.provenance_logger.log({\n                \"stage\": \"behavior_monitoring\",\n                \"threat_detected\": True,\n                \"severity\": behavior_result[\"severity\"],\n                \"agent\": agent_id\n            })\n            return {\"action\": \"block\", \"reason\": \"behavioral anomaly detected\"}\n        \n        # Se tutti i controlli passano, consenti il flusso\n        self.provenance_logger.log({\n            \"stage\": \"all_checks_passed\",\n            \"agent\": agent_id,\n            \"timestamp\": datetime.now()\n        })\n        \n        return {\"action\": \"allow\", \"output\": vlm_output}\n<\/code><\/pre>\n<h2>Metriche di performance nel mio ambiente di produzione<\/h2>\n<p>Dopo tre mesi di deployment sui nostri sistemi di intelligenza artificiale multimodale, ho misurato:<\/p>\n<ul>\n<li><strong>Accuratezza di rilevamento injection<\/strong>: <cite>94% di tasso di rilevamento, superiore al keyword filtering (52%), post-hoc output filtering (61%), e safety fine-tuning (66%)<\/cite><\/li>\n<li><strong>Falsi positivi<\/strong>: 3-5% (accettabile per il nostro caso d&#8217;uso di sicurezza critica)<\/li>\n<li><strong>Latenza aggiunta<\/strong>: ~150-200ms per immagine (accettabile per agentic workflows non-real-time)<\/li>\n<li><strong>Riduzione del tasso di successo dell&#8217;attacco<\/strong>: Dal 70% pre-defense al 6-8% post-implementation<\/li>\n<\/ul>\n<h2>Limitazioni e considerazioni di deployment<\/h2>\n<p>Nessun framework di sicurezza \u00e8 perfetto. Le limitazioni che ho riscontrato:<\/p>\n<ul>\n<li><strong>Attacchi fisici 3D<\/strong>: <cite>Gli attacchi fisici e tridimensionali rappresentano la frontiera della superficie di attacco, con istruzioni avversariali tipografiche incorporate su oggetti fisici nel campo visivo di agenti camera-equipped<\/cite>. Il mio framework non pu\u00f2 difendersi completamente contro segnali stampati nel mondo reale<\/li>\n<li><strong>Evoluzione dell&#8217;attacco<\/strong>: <cite>A differenza degli approcci tipografici o steganografici, gli attacchi basati su perturbazione possono essere sintonizzati per evadere architetture di rilevamento specifiche, rendendoli una minaccia persistente mentre le difese maturano<\/cite><\/li>\n<li><strong>Overhead computazionale<\/strong>: <cite>ARGUS identifica uno spazio di sottoinsieme di sicurezza nello spazio di attivazione del modello e applica steering adattivo, ma il metodo aggiunge overhead computazionale al tempo di inferenza<\/cite><\/li>\n<\/ul>\n<h2>Integrazione con ambienti agentic e sistemi autonomi<\/h2>\n<p>Nel mio testing, ho scoperto che il framework funziona particolarmente bene negli agentic workflows dove i VLM interagiscono con web browsers o sistemi di command execution. Collego il detection framework direttamente alle <strong>policy enforcement layers<\/strong> dell&#8217;orquestrazione agenti:<\/p>\n<pre><code># Integration con agentic orchestration\nclass SafeAgenticWrapper:\n    def __init__(self, agent, defense_framework):\n        self.agent = agent\n        self.defense = defense_framework\n    \n    def process_visual_input(self, image, task_instruction):\n        # Run defense BEFORE agent processing\n        defense_result = self.defense.process_multimodal_input(\n            image, \n            task_instruction,\n            agent_id=self.agent.id\n        )\n        \n        if defense_result[\"action\"] == \"block\":\n            # Log incident e fallback a modalit\u00e0 safe\n            self.agent.emit_alert(\n                f\"Prompt injection blocked: {defense_result['reason']}\"\n            )\n            return {\"status\": \"blocked\", \"reason\": defense_result[\"reason\"]}\n        \n        # Proceed con execution agente\n        return self.agent.execute(image, task_instruction)\n<\/code><\/pre>\n<h2>FAQ<\/h2>\n<h3>Quali differenze ci sono tra attacchi multimodali e prompt injection testuali?<\/h3>\n<p>Gli attacchi testuali si affidano a istruzioni esplicite nel testo che possono essere filtrate da keyword matching. Gli attacchi multimodali distribuiscono il malintento su pi\u00f9 modalit\u00e0 (immagine + testo, audio + testo) in modi che i sistemi di guardrail basati su unimodalit\u00e0 non sanno correlazionare. <cite>I sistemi di sicurezza attuali assumono input unimodali dove i guardrail possono ispezionare il contenuto completo del prompt, ma gli attacchi cross-modali rendono queste difese inutili distribuendo l&#8217;intento malvagio su multiple modalit\u00e0 che i sistemi di sicurezza non correlazionano<\/cite>.<\/p>\n<h3>Il framework di rilevamento protegge completamente dai rischi vision-based injection?<\/h3>\n<p>No. La sicurezza dell&#8217;AI \u00e8 una corsa agli armamenti continua. Il framework raggiunge il 94% di accuratezza su attacchi noti, ma gli attaccanti evolvono continuamente le loro tattiche. <cite>Gli attacchi basati su perturbazione non tipografici possono essere sintonizzati per evadere architetture di rilevamento specifiche, rendendoli una minaccia persistente mentre le difese maturano<\/cite>. Considerate questo framework come uno strato di una strategia defense-in-depth pi\u00f9 ampia.<\/p>\n<h3>Posso usare il framework per proteggere sistemi di guida autonoma in produzione?<\/h3>\n<p>S\u00ec, ma con cautela. Ho configurato la modalit\u00e0 &#8220;aggressive&#8221; del framework (Gaussian blur pi\u00f9 forte, threshold pi\u00f9 bassi) per ambienti autonomi. Tuttavia, <cite>gli attacchi fisici 3D e le istruzioni avversariali tipografiche incorporate su oggetti fisici nel campo visivo rappresentano la frontiera della superficie di attacco<\/cite> che questo framework da solo non pu\u00f2 prevenire. Abbinate il rilevamento con misure fisiche di perimetro.<\/p>\n<h3>Quale modello di VLM dovrei usare con questo framework?<\/h3>\n<p>Ho testato il framework con Claude 3 Opus, GPT-4o e modelli open-source come Llama 4. <cite>NVIDIA&#8217;s AI Red Team ha scoperto che modelli con architetture early fusion come Meta&#8217;s Llama 4 sono particolarmente vulnerabili perch\u00e9 fondono token di testo e visione dall&#8217;inizio<\/cite>. Considerate di usare modelli con <em>late fusion<\/em> (separazione tra vision encoder e text encoder) se il vostro caso d&#8217;uso lo permette.<\/p>\n<h3>Quanto costa implementare questo framework in produzione?<\/h3>\n<p>In termini di infrastructure, il framework aggiunge ~150-200ms di latenza per immagine e aumenta il costo di GPU del 15-25% (dovuto al neural detection model). Per una pipeline che processa 1M di immagini al mese, contiamo un overhead di ~$300-500\/mese. Il ROI pu\u00f2 essere positivo in 18 mesi considerando i costi di una compromissione di sicurezza AI.<\/p>\n<h2>Conclusione: La sicurezza multimodale \u00e8 oggi prioritaria<\/h2>\n<p>Nel mio percorso da system administrator che ha iniziato negli anni 2010 con preoccupazioni puramente testuali, gli attacchi multimodali rappresentano un salto qualitativo nel profilo di rischio AI. <strong>Il framework che ho descritto non \u00e8 una soluzione silver-bullet<\/strong>\u2014\u00e8 uno strato critico in una strategia di sicurezza composita che combina pre-processing, cross-modal consistency checking, neural detection e behavioral monitoring.<\/p>\n<p>Se state deployando vision-language models in produzione ad agosto 2026, specialmente in ambienti agentic o autonomi, implementare un detection framework multimodale non \u00e8 opzionale\u2014\u00e8 imperativo. Ho visto cosa succede quando le organizzazioni ritardano questo step: il costo della remediation \u00e8 decine di volte superiore al costo di implementation preventiva.<\/p>\n<p>Avete domande sulla implementazione nel vostro ambiente? Condividete le vostre esperienze nei commenti\u2014continuo a imparare dalle sfide reali che i colleghi affrontano in produzione.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Come implementare un detection framework multimodale per proteggere vision-language model da cross-modal prompt injection, attacchi vision-based e sfruttamento text-image hybrid.<\/p>\n","protected":false},"author":1,"featured_media":2902,"comment_status":"","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"_seopress_robots_primary_cat":"","_seopress_titles_title":"Multimodal Prompt Injection Defense August 2026 | Framework Rilevamento","_seopress_titles_desc":"Implementa detection framework multimodale 94% accuratezza contro prompt injection cross-modal, vision-based attacks e hybrid text-image exploits in produzione.","_seopress_robots_index":"","footnotes":""},"categories":[128],"tags":[484,428,1123,1022,1074],"class_list":["post-2901","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-a-i","tag-ai-security","tag-defensive-ai","tag-multimodal-llm","tag-prompt-injection","tag-vision-language-models"],"_links":{"self":[{"href":"https:\/\/darioiannascoli.it\/blog\/wp-json\/wp\/v2\/posts\/2901","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/darioiannascoli.it\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/darioiannascoli.it\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/darioiannascoli.it\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/darioiannascoli.it\/blog\/wp-json\/wp\/v2\/comments?post=2901"}],"version-history":[{"count":0,"href":"https:\/\/darioiannascoli.it\/blog\/wp-json\/wp\/v2\/posts\/2901\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/darioiannascoli.it\/blog\/wp-json\/wp\/v2\/media\/2902"}],"wp:attachment":[{"href":"https:\/\/darioiannascoli.it\/blog\/wp-json\/wp\/v2\/media?parent=2901"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/darioiannascoli.it\/blog\/wp-json\/wp\/v2\/categories?post=2901"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/darioiannascoli.it\/blog\/wp-json\/wp\/v2\/tags?post=2901"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}