Pick a depth. Each prompt opens in your AI pre-loaded with the lesson. Click a row to preview the prompt.
The OWASP LLM Top 10 is the closest thing this field has to a shared vocabulary, and this course is structured to cover almost every entry in it by the time you finish. Knowing the list by name matters for a boring but real reason: when you write a findings report, file a bug, or talk to another security engineer, 'LLM01: Prompt Injection' communicates in three words what would otherwise take a paragraph to explain precisely. Treat this task as the map you'll refer back to for the rest of the course — every later module names which risk category it's attacking or defending, so you always know where you are in the bigger picture and can cross-reference real advisories that use the same names.
The demo encodes the current Top 10 as data and a lookup function, then tags which module of this course covers each one — so you have a working index, not just a list to memorize.
lookup(code) for all ten codes and confirm every one maps to a module you can name.LLM00 placeholder entry for a risk you think is missing from the official list, and justify it in a comment.LLM_TOP_10 by which risk you believe is highest-impact for a RAG customer-support bot specifically, and defend the top three in one sentence each.LLM_TOP_10 = {
"LLM01": ("Prompt Injection", "Untrusted input changes model behavior against the developer's intent."),
"LLM02": ("Sensitive Information Disclosure", "Model reveals secrets, PII, or proprietary data in its output."),
"LLM03": ("Supply Chain", "Compromised models, datasets, or plugins/dependencies."),
"LLM04": ("Data and Model Poisoning", "Training, fine-tuning, or retrieval data is tampered with."),
"LLM05": ("Improper Output Handling", "Model output is trusted downstream without validation/sanitization."),
"LLM06": ("Excessive Agency", "An agent is granted more permissions, tools, or autonomy than it needs."),
"LLM07": ("System Prompt Leakage", "The system prompt (and any secrets in it) is extracted by an attacker."),
"LLM08": ("Vector and Embedding Weaknesses", "Retrieval/embedding pipelines leak, poison, or misrank content."),
"LLM09": ("Misinformation", "The model produces confident, plausible, false output that is acted on."),
"LLM10": ("Unbounded Consumption", "Uncontrolled resource use -- cost, compute, or denial of wallet/service."),
}
COVERED_IN_MODULE = {
"LLM01": 2, "LLM07": 2,
"LLM04": 4, "LLM08": 4,
"LLM06": 5,
"LLM02": 6, "LLM10": 6,
"LLM05": 7, "LLM09": 4,
"LLM03": 8,
}
def lookup(code: str) -> str:
name, desc = LLM_TOP_10[code]
mod = COVERED_IN_MODULE.get(code, "multiple")
return f"{code} {name}: {desc} (this course: module {mod})"
for code in ["LLM01", "LLM06", "LLM10"]:
print(lookup(code))python3 main.py