Prompt Injection in the Enterprise: Practical Defenses for LLM Integrations (Design Patterns & Controls)
LLM SecurityApplication SecurityThreat Modeling

Prompt Injection in the Enterprise: Practical Defenses for LLM Integrations (Design Patterns & Controls)

JJordan Ellis
2026-05-25
25 min read

A practical enterprise guide to prompt injection defenses for RAG and copilots: patterns, controls, testing, and governance.

Prompt injection is not a one-off bug you patch and move on from; it is a structural risk in any system that blends AI-first security controls with untrusted text, tools, and retrieval. If your organization is shipping copilots, RAG apps, or agent workflows, you must assume that hostile instructions can enter through user prompts, documents, tickets, web pages, emails, logs, and even tool outputs. The operational lesson is simple: treat the model like a privileged parser sitting inside an adversarial environment, then design the whole integration so the model never becomes the final authority on safety, data access, or action execution.

This guide focuses on practical defenses that security, platform, and product teams can implement now. We will map the real threat surfaces in vendor-integrated systems, show why SRE-style resilience thinking applies to LLM deployments, and turn abstract terms like guardrails, sandboxing, and provenance tags into concrete controls. The goal is not to promise perfect immunity; it is to reduce exploitability, limit blast radius, and make attacks observable, testable, and recoverable.

1) Why Prompt Injection Is a Structural Risk, Not a Corner Case

The core failure mode: instructions and data are mixed together

Traditional software can usually tell code from data. LLMs are different because they read everything in-context as language, which means a malicious instruction buried in a document can compete with your system prompt or policy text. That blurring is what makes prompt injection persistent and hard to eliminate. Even strong policies can fail when the model encounters a convincing instruction in a retrieved page, a support ticket, or a tool response that looks authoritative.

For teams building retrieval augmented generation, the risk is amplified by design. RAG pipelines intentionally ingest content from outside the trust boundary, and those documents may contain prompt-like text, hidden markup, OCR artifacts, or adversarial payloads. The more useful your retriever becomes, the more material it can bring into the prompt window, and the more likely it is that the model will follow hostile instructions unless you isolate, label, and filter aggressively.

Where enterprise copilots break

Copilots usually fail in one of three ways: they reveal data they should not, they take actions they should not, or they create output that looks safe but is subtly wrong. The first two are security failures; the third is often a governance failure that becomes a security incident later. If your assistant can query internal systems, summarize sensitive data, draft outbound messages, or trigger workflows, then injection can chain from text manipulation into unauthorized access or action execution.

This is why prompt injection should be treated alongside security architecture decisions and not as a prompt-engineering nuisance. Once a model is connected to mailboxes, tickets, CRM, source control, or cloud APIs, it becomes a control plane user. A compromised prompt can become an access path, especially when tool permissions are broad and the agent can reason across multiple steps without hard constraints.

Threat actors exploit trust, not intelligence

Prompt injection succeeds because the system trusts language too much. Attackers do not need to “hack the model” in a classical sense; they only need to craft text that causes the model to re-interpret its task, leak context, or reveal the hidden prompt. In practice, the payload might be obvious, like “ignore previous instructions,” or it might be subtle, embedded in HTML comments, markdown, image alt text, or a copied email chain.

The response should not be to rely on the model’s self-restraint. Instead, build layers that prevent untrusted instructions from becoming executable intent. That means separating contexts, tagging provenance, constraining tools, and validating outputs before anything sensitive leaves the boundary.

2) Map the High-Risk Attack Surface Before You Add Controls

RAG pipelines are a primary exposure point

In retrieval augmented generation, the retriever becomes a potential attacker-controlled input channel. If documents are not normalized, scored, and classified before they reach the model, hostile text can ride along with legitimate evidence. A common failure pattern is allowing the model to use all retrieved chunks equally, which means a poisoned document can override the intent of the original user request. The fix is not simply “better prompts”; it is shaping the retrieval and context assembly layer so low-trust content is visibly lower trust.

One practical control is to segment retrieved data by source trust and assign it explicit metadata. Another is to cap the number of untrusted chunks that can influence a single answer. Teams that ignore these basics often discover that the model obeys the most recent or most forcefully worded instruction, even if it came from a low-value web scrape. For a broader operational view of how systems can fail under scale and uncertainty, see unified signals dashboard design patterns where multiple inputs must be evaluated without letting one noisy feed dominate.

Tools and agents introduce the highest-risk blast radius

Once the model can call tools, prompt injection becomes more than content manipulation. The adversary now wants the model to invoke APIs, export data, alter settings, or impersonate a user. This is why agentic workflows need explicit action gates, least privilege, step-up authorization, and sandboxed execution paths. If the assistant can write to production systems, send emails, or fetch secrets, then one bad instruction can cascade into real-world impact.

Do not let a single reasoning loop both decide and execute high-risk actions. Split planning from execution, and insert deterministic validators between the two. When the model proposes a sensitive operation, a policy engine should check scope, identity, destination, and content before the action is allowed. That’s the same discipline behind strong operational talent pipelines: reliability comes from process, not optimism.

Hidden and indirect prompt injection are especially dangerous

Indirect prompt injection happens when malicious instructions are embedded in third-party content the model later ingests. That content might live in a help article, a shared doc, a PDF, a webpage, or even an image transcribed by OCR. Because the user never typed the malicious text directly, teams often underestimate it. In enterprise environments, this is the path most likely to surprise defenders because the payload can sit dormant until a particular workflow retrieves it.

Mitigation starts with content inspection. Scan documents for prompt-like phrases, role reversal attempts, exfiltration instructions, and hidden formatting before retrieval. Then assign source reputation, freshness, and task relevance scores separately so the model does not treat all text as equal. If your system processes customer-uploaded files, use the same caution you would apply to any untrusted attachment in a mail gateway.

3) Design Pattern: Context Separation and Trust Zoning

Build explicit boundaries between instructions, evidence, and user input

The single most effective design pattern is context separation. Your system prompt, policy prompt, retrieved evidence, user text, and tool outputs should never be blended into one undifferentiated blob. Instead, structure the prompt so each section has a clear label, a trust level, and a narrow purpose. The model should know what is instruction, what is evidence, and what is commentary, but your architecture should not depend on it perfectly obeying those labels.

In practice, this means using wrappers or templates that inject provenance markers around each item of context. It also means avoiding “free-form concatenation,” which creates accidental authority for whatever text arrives last. Teams that invest in clean context boundaries can usually reduce the chance that a malicious document overrides the intended task. This is the same kind of discipline used in secure large-file workflows, where segmentation and access controls matter more than convenience.

Assign trust levels and preserve them through the pipeline

Every content source should be tagged: system-owned, internal authoritative, internal untrusted, external trusted, and external untrusted are useful starting points. Those tags should survive ingestion, retrieval, rendering, and response synthesis. If a retrieved document originated from a low-trust source, the model should be instructed to treat it as evidence only, never as instruction. That instruction must be reinforced by the application layer, not just the prompt.

Provenance tags are especially important for enterprise search, legal review, and support copilots where user-generated content is mixed with policy docs. Without tags, the model can mistake a quoted attacker instruction for a governance rule. With tags, your downstream filters can make decisions using deterministic code rather than fuzzy language reasoning. This is where incident response discipline becomes essential: label first, contain second, reason third.

Use separate prompts for separate tasks

Do not ask one prompt to retrieve, reason, summarize, classify risk, and execute actions all at once. Break the workflow into staged prompts with limited scope and fixed outputs. The first stage can gather and summarize; the second can classify whether the input is safe; the third can produce a response; the fourth can request approval for sensitive actions. Smaller tasks are easier to test and much harder to hijack.

Staged prompting also makes failures easier to observe. If a retrieval stage starts surfacing malformed or suspicious text, you can stop before generation and execution. That is materially safer than trying to patch the problem after the model has already decided on an answer. For teams modernizing platform work, the logic resembles workflow automation selection: decompose, constrain, and validate at each step.

4) Input Sanitization: Reduce the Attack Surface Before the Model Sees It

Normalize content and strip instruction-shaped artifacts

Input sanitization for LLMs is not about blocking all unusual text; it is about removing accidental command surfaces and reducing ambiguity. Normalize Unicode, strip invisible characters, collapse excessive whitespace, and remove dangerous markup where it is not needed. Pay special attention to HTML, markdown, XML, PDF text extraction, and code blocks, because attackers frequently hide instructions in formatting rather than plain words.

Sanitization should also remove or quarantine prompt injection signatures such as role assignment attempts, system prompt requests, secret exfiltration phrases, and tool-command phrasing. The goal is not a brittle keyword blacklist; it is a structured preprocessor that can transform untrusted text into safer evidence. Think of it as the AI equivalent of disinfecting data before it enters a privileged environment.

Classify and compartmentalize user uploads

Documents uploaded by users should be treated as potentially malicious, even when they are “internal” to the business process. Run them through malware scanning, OCR-aware extraction, and content classification before indexing or retrieval. If a document is relevant but noisy, store it in a separate trust class and require explicit justification before it can influence a high-risk response. That approach is especially important for copilots used in procurement, HR, finance, and legal workflows.

When possible, extract only the fields needed for the task rather than indexing entire documents. Narrower data exposure reduces both accidental leakage and injection opportunities. If the assistant only needs a date, a customer name, and a policy code, do not give it the entire contract body unless there is a clear business reason. This is the same principle behind data compliance in client software: minimize what moves, then audit what remains.

Block untrusted tool output from masquerading as instructions

Tool responses are a major blind spot because engineers often assume that data returned from an internal API is inherently safe. That assumption fails when the upstream system contains user-supplied text, third-party content, or corrupted records. Any data returned from a tool should be considered content, not instruction, unless it is generated by a trusted policy service or a signed internal control plane.

Practical sanitization includes escaping instruction syntax, converting raw HTML to plain text, and truncating long outputs that are not needed. If a tool returns a webpage or ticket body, append metadata showing its source and trust class. Never let the model infer that a tool response supersedes the system message unless that is intentionally designed and narrowly authorized.

5) Sandboxing, Guardrails, and Tool Permission Boundaries

Sandbox execution, not just reasoning

Sandboxing is one of the most underrated controls in LLM security. Many teams focus on prompt text, but the real damage happens when the model can operate outside a constrained environment. Any code execution, browser automation, file handling, or API orchestration should run in an isolated runtime with no ambient secrets, constrained network egress, and tight filesystem boundaries. If the sandbox is compromised, the blast radius stays small.

For browser-based copilots, consider strict domain allowlists, isolated sessions, and ephemeral credentials. For internal agents, use short-lived tokens scoped to a single task and revoke them immediately after use. Where possible, split the “thinking” environment from the “doing” environment so a compromised prompt cannot directly touch production. This mirrors how enterprises harden other complex systems, including server capacity planning and other stateful infrastructure controls.

Guardrails should be enforced in code, not only in prompts

Guardrails are effective only when they are backed by deterministic policy checks. A model instruction like “do not reveal secrets” is helpful, but it is not a security control. Real guardrails need enforcement points that can block sensitive outputs, deny certain tool calls, require human approval, and log policy violations. That way, even if the model is manipulated, the application still refuses unsafe behavior.

Good guardrails are policy-aware and context-aware. For example, a support copilot may be allowed to summarize account status but not export account data, while a developer copilot may inspect logs but not print tokens. The control should be specific to the action, the user role, and the destination. If the model wants to send an email, export a CSV, or access an admin endpoint, the guardrail engine should require an explicit, auditable reason.

Least privilege must apply to every tool

Every connected tool is a potential exfiltration channel or action surface. Remove write access unless the workflow absolutely needs it, and segment tools so the assistant can only use the minimum necessary capability. If the model queries a knowledge base, it should not automatically inherit access to ticket updates, HR records, or production secrets. Separate credentials, separate scopes, and separate approval paths are mandatory.

Teams often underestimate the risk of indirect tool chaining. A model may not be able to read a secret directly, but it might use an internal ticketing tool to request a dump, then summarize the results, then send them elsewhere. This is why threat modeling must include multi-step abuse paths, not just single-call safety. The analogy is similar to measuring hidden traffic loss: if you only look at obvious channels, you miss the real leak.

6) Response Filtering: Control What Leaves the System

Filter sensitive data, secrets, and policy artifacts

Response filtering is the last line of defense before output reaches a human, system, or downstream automation. It should detect secrets, credentials, internal identifiers, private personal data, and prompt scaffolding that should never be exposed. Filtering should also look for suspicious meta-output such as “system prompt,” “developer instructions,” tool chains, or hidden reasoning leakage. If the model emits something that looks like configuration or control text, block it until reviewed.

Do not rely on the model to self-censor. Implement deterministic detectors, allowlists for output shapes, and redaction rules for known sensitive patterns. For high-risk apps, consider a policy engine that validates both semantic content and structure before release. In healthcare and regulated workflows, this is as important as the controls described in operational security and compliance for AI-first platforms.

Constrain response format to reduce exploitability

One of the easiest ways to reduce response-risk is to constrain output to a fixed schema. If the assistant must return JSON with predefined fields, there is less room for it to accidentally reveal prompt contents or embed malicious instructions. You can also separate machine-readable output from human-readable explanation, which makes it easier to inspect and validate. Structured output does not eliminate injection, but it narrows the paths the attacker can use.

Where the output is user-facing, apply content moderation and language filters tuned to your use case. Where the output is machine-to-machine, enforce schema validation, size limits, and confidence thresholds. This is especially important in enterprise copilots that integrate with finance, support, or operations pipelines where one bad output can trigger an automation loop. The same discipline improves credibility in public-facing AI experiences such as verifiable AI presenters, where provenance and traceability matter.

Watch for prompt leakage and chain-of-thought exposure

Even if you do not explicitly ask for chain-of-thought, a model can still leak internal control text, hidden instructions, or intermediate reasoning fragments. That can disclose system design details, policy language, or secrets embedded in prompts. You should strip reasoning artifacts from user-visible output and keep any internal reasoning in a separate, access-controlled log if you retain it at all.

Do not store or expose more model internals than necessary. If your platform supports reasoning traces, treat them as sensitive operational records, not normal application logs. The more your team can inspect them safely, the better your debugging posture; the more your users can see them, the larger your attack surface.

7) Adversarial Testing: Prove the Defenses Work

Build a red-team corpus for your own workflows

Security teams should maintain a living corpus of prompt injection examples tailored to their systems. Generic jailbreak prompts are useful, but enterprise risk comes from domain-specific payloads: phishing-laced support tickets, poisoned KB articles, malicious invoice attachments, and injected policy snippets in legal drafts. Your test set should reflect the actual inputs your applications process every day.

Red-team cases should cover direct injection, indirect injection, tool hijacking, prompt exfiltration, output coercion, and multi-turn escalation. Track which control failed for each case: ingestion, retrieval, prompt assembly, tool gating, or response filtering. The point is not to “win” against the model once, but to establish repeatable assurance across changes to prompts, retrieval indexes, plugins, and model versions. Teams that already run AI-mediated conversation controls will recognize the need for adversarial diversity rather than single-path testing.

Test the full pipeline, not only the model

A common mistake is testing the foundation model in isolation while ignoring the surrounding application. In production, the model is only one component in a larger chain that includes retrieval, preprocessing, policy enforcement, logging, and action execution. If any one of those layers is weak, the whole system is weak. Full-path testing is the only way to see whether a malicious document can survive the pipeline and produce harmful output.

Include regression tests for prompt changes, new connectors, new tools, and changed access scopes. Every time you add a source to RAG or a new agent capability, rerun the attack suite. If a test fails in a way that reaches a user, treat that as a release blocker, not a low-priority issue. This is the same reason mature organizations invest in reliable operational pipelines instead of one-off heroics.

Measure outcomes that matter to the business

Your security metrics should go beyond “number of prompts tested.” Track secret leakage rate, unsafe tool-call rate, policy violation rate, time-to-detect, and time-to-contain. Also track how often legitimate requests are blocked, because an over-aggressive control can push users to bypass the assistant entirely. Good governance balances security and utility, then iterates based on evidence.

When possible, attach each failed test to a remediation owner and due date. If the issue is a retrieval poisoning problem, the owner may be platform engineering. If it is a content moderation gap, the owner may be the product team. If it is a tool permission flaw, the owner may be IAM or security architecture. Treating prompt injection as an operational backlog is how organizations convert awareness into resilience.

8) Governance, Monitoring, and Incident Response

Log enough to investigate, but not so much you leak data

LLM monitoring must be designed with dual risk in mind: you need visibility for forensic analysis, but logs can themselves become a leakage source. Record the model version, prompt template version, retrieval source IDs, tool calls, policy decisions, and redaction events. Avoid storing raw sensitive prompts unless there is a strong legal or security justification and a separate retention control.

Logs should let you reconstruct how a bad answer happened without exposing secrets to every operator. Correlate model events with user identity, session context, and policy outcomes. That enables faster triage when the assistant produces an unsafe or manipulated response. For teams building broader operational discipline, this resembles the containment mindset in digital reputation incident response: preserve evidence, stop spread, then restore trust.

Define an escalation path for prompt injection events

Not every injection attempt is a breach, but every confirmed exploit should have a response playbook. The playbook should define how to disable the connector, quarantine the data source, revoke tokens, notify owners, and review logs. If the agent has taken actions, you need a rollback path or at least a containment checklist. Do not wait until a severe event to figure out who can shut the system down.

Good incident response also includes customer and internal communications. If the assistant exposed data or acted incorrectly, product and security teams need aligned messaging that explains impact without overclaiming certainty. If the issue was source poisoning, teams should explain what was quarantined and whether the retriever or the model was at fault. Transparent communication improves trust and reduces the chance of repeated misuse.

Make governance continuous, not ceremonial

Policies that sit in a slide deck do not stop prompt injection. Governance should appear in code review, architecture review, vendor review, access review, and release gating. Any new model feature that broadens context, expands tools, or ingests untrusted content should trigger a formal security review. That review should ask who can inject data, who can see outputs, and what the system will do if every source is hostile.

There is also a product lesson here: the safer your assistant becomes, the more valuable it can be adopted at scale. Security controls are not just defensive overhead; they are the reason enterprise deployment is possible in the first place. Without them, even impressive copilots eventually create enough risk to be shelved or heavily restricted.

9) Practical Reference Architecture for Secure LLM Integrations

Use a layered pipeline with explicit control points

A defensible enterprise architecture usually looks like this: ingest content, normalize and classify it, tag provenance, retrieve only what is needed, assemble a segmented prompt, run policy checks, generate a constrained response, filter the output, then log the event. Each layer should have a narrow purpose and a clear failure mode. If one layer fails, the next layer should still have enough information to stop unsafe behavior.

The simplest mental model is that the model is one component in a larger security chain, not the chain itself. If you depend on prompt wording alone, the system is fragile. If you pair prompt design with deterministic controls, you can make it robust enough for real enterprise use. That is the same philosophy behind reliable infrastructure work like capacity tuning for Linux servers: constraints are part of the design, not an afterthought.

Control matrix: what to apply where

The table below summarizes where each defense is most useful and what it is intended to stop. Use it as a deployment checklist rather than a theoretical model. In mature environments, multiple controls should overlap so that a single missed step does not become a breach. The more sensitive the workflow, the more layers should be mandatory rather than optional.

ControlPrimary LayerStopsImplementation Notes
Context separationPrompt assemblyInstruction/data confusionLabel system, user, retrieved, and tool content separately
Input sanitizationIngestionHidden instructions, markup abuseNormalize, strip unsafe formatting, remove invisible characters
Provenance tagsRetrieval and loggingSource ambiguityPreserve trust class through the full pipeline
SandboxingExecutionTool abuse, lateral movementIsolate runtime, restrict egress, remove ambient secrets
GuardrailsPolicy enforcementUnsafe tool calls, disallowed outputsEnforce in code, not only in prompts
Response filteringOutput layerLeakage, secret disclosureRedact secrets, validate schema, block policy artifacts
Adversarial testingQA and releaseRegressions, hidden failuresMaintain a domain-specific red-team corpus

What “good enough” looks like in practice

There is no magic setting that makes prompt injection disappear. Mature teams aim for containment, not perfection. A good implementation can distinguish trusted from untrusted context, limit what the model can do, keep sensitive actions behind approvals, and surface suspicious behavior quickly. That is enough to safely deploy many high-value workflows, provided the team keeps testing and tightening controls as capabilities expand.

If you need a quick readiness check, ask whether your current design would still be safe if every retrieved document were malicious, every tool response were misleading, and every user input were adversarial. If the answer is no, you do not yet have a prompt-injection-resistant architecture. You have a clever demo that needs more control points before it becomes a system of record.

10) Implementation Checklist for Security, Platform, and Product Teams

Security team checklist

Security teams should start by identifying every model entry point, every external data source, and every tool credential. Then define the trust class for each input, the approved action scope for each tool, and the logging fields required for incident response. Finally, publish an attack library and require regression testing for any change that affects context, retrieval, or action execution.

Do not wait for a major incident to formalize these controls. The same way a mature org prepares for reskilling and reliability shifts, AI governance should be built into the operating model. The work is ongoing, and the threat surface changes every time the team adds a connector or model feature.

Platform and engineering checklist

Engineering teams should implement input normalization, source tagging, policy checkpoints, output filtering, and sandboxed execution as platform primitives. These capabilities should not be re-implemented inconsistently across product teams. Centralizing them improves assurance, simplifies audits, and makes future model migrations safer. It also reduces the temptation to let each team “solve” security in prompt text alone.

As a rule, if a control matters for safety, it belongs in platform code. Prompts can reinforce policy, but they should not be the only layer that enforces it. That separation is what lets your organization iterate on model behavior without reopening the entire security design each time. For more on structured operational automation, see workflow automation templates and adapt the same rigor to AI operations.

Product and governance checklist

Product leaders should define the acceptable risk profile for each AI use case. A read-only assistant has a different risk posture than an agent that can send messages or modify records. Governance should require written approval for any feature that increases the model’s authority, expands its context window, or gives it access to new systems. If a feature cannot be explained in simple terms to a reviewer, it likely needs a stronger control layer.

It is also wise to publish user guidance. Users should know which content types are unsafe to upload, when the assistant may refuse, and how sensitive actions are approved or rolled back. Clear expectations reduce support friction and help employees recognize when behavior looks suspicious. That kind of trust-building is one reason some organizations prioritize clearer communication in media literacy and misinformation defense programs.

Conclusion: Make Prompt Injection Boring

The right goal is not to make prompt injection impossible; it is to make it operationally boring. When context is separated, inputs are sanitized, provenance is preserved, actions are sandboxed, outputs are filtered, and attacks are continuously tested, the common failure modes become predictable and containable. That is the threshold enterprises need before they can trust LLM integrations with real business workflows.

If you are evaluating a copilot, RAG platform, or agentic AI initiative, use this guide as a deployment gate. Ask where untrusted content enters, how it is labeled, how it is filtered, what the model can do, and how you will know if something goes wrong. Then require proof through adversarial testing, not promises in a slide deck. The organizations that win in AI security will be the ones that design for failure early and verify their defenses continuously.

For additional context on adjacent risk areas and operational hardening, review our guides on operational security and compliance, secure file sharing, data compliance, incident response, and vendor-locked API design. Those patterns reinforce the same core lesson: trust must be engineered, not assumed.

FAQ: Prompt Injection and Enterprise LLM Security

1) Is prompt injection the same as jailbreaks?

No. Jailbreaks usually target the model directly with adversarial phrasing, while prompt injection often hides malicious instructions inside content the system processes. Enterprise risk is broader because the attack can arrive through retrieval, tools, uploaded files, or third-party data.

2) Can we solve prompt injection with a better system prompt?

Not reliably. System prompts help, but they are not security controls. You need architectural defenses such as context separation, provenance tags, tool restrictions, output filters, and adversarial testing.

3) What is the best defense for RAG applications?

There is no single best defense. The strongest pattern is layered: sanitize inputs, tag source trust, retrieve selectively, separate evidence from instructions, and filter outputs before release. RAG needs governance at both ingestion and generation.

4) Should agents be allowed to take actions automatically?

Only for low-risk, tightly scoped operations. Anything that touches customer data, production systems, finance, or external communications should require strong guardrails, least privilege, and often human approval. The more the action can cause irreversible harm, the less autonomy the agent should have.

5) How do we test for indirect prompt injection?

Build a red-team corpus of poisoned documents, emails, support cases, and web content that mimic your real inputs. Then run end-to-end tests through ingestion, retrieval, prompt assembly, output filtering, and tool execution to see where the attack survives.

6) What logs should we keep for investigations?

Keep model version, prompt template version, retrieval source IDs, tool calls, policy outcomes, and redaction events. Avoid unnecessary raw sensitive content unless retention is justified and separately protected.

Related Topics

#LLM Security#Application Security#Threat Modeling
J

Jordan Ellis

Senior Security Content Strategist

Senior editor and content strategist. Writing about technology, design, and the future of digital media. Follow along for deep dives into the industry's moving parts.

2026-05-25T02:41:51.915Z