Is my website chatbot vulnerable? A 15-minute self-test

Five checks for the chatbot on your website or inside your app. Each one ends as detected, unknown or confirmed by owner evidence.

Timothy Lindblom

Founder, Newly

Published Last updated

Probably in at least one way, and you can find out in 15 minutes without attacking anything. Check what the chatbot's prompt and files expose, what its tools can do, what its replies are allowed to load, what a stranger can spend through it and what outside text it reads. Mark each result detected, unknown or confirmed by owner evidence.

CheckTimeOWASP 2026 entryWhat you look at
1. Hidden context3 minLLM08 Hidden Context ExposureSystem prompt, knowledge files, where the provider key lives
2. Tools and access3 minLLM03 Excessive AgencyEvery action the bot can take and the account it uses
3. Reply rendering3 minLLM10 Improper Output HandlingMarkdown, images, link previews, CSP header
4. Cost3 minLLM06 Unbounded ConsumptionSpend cap, per-visitor limits, message length
5. What it reads3 minLLM01 Prompt InjectionForms, emails, files and pages that outsiders can write to

What does vulnerable mean for a website chatbot?

A chatbot treats text as instructions, whether the text comes from your prompt, a visitor or a document it reads. OWASP's 2026 entry on prompt injection says models do not separate instructions from data, so there is no equivalent of a parameterised database query. MITRE added direct and indirect prompt injection to ATT&CK on October 13, 2026.

So a pass or fail on injection is not on offer. The question to answer is what a successful injection could reach. This page treats your chatbot as vulnerable to the extent that it holds secrets, can act, can leak through its replies or can spend money. It is the companion to the 15-minute check for the whole app, and the security hub lists the rest.

Why there is no pass mark

The UK NCSC wrote on December 8, 2025 that prompt injection may never be fully mitigated and advises reducing its likelihood and impact, with deterministic limits outside the model. Treat any chatbot result as unknown until you hold evidence for the limit you set.

Where the five checks sit on a chatbot request path: hidden context and keys on your server, tools on your server, rendering of the reply in the page, spend limits on the server, and outside content the bot reads.Outside contentforms, emails, files, pages5Visitortypes a messageYour serverProvider key, system prompt1Tools and data access2Limits and spend cap4Model providerwrites the replyReply shown on your pageMarkdown, images, links3
The numbers match the five checks below.

What is the 15-minute self-test?

Five checks, about three minutes each. They read your own configuration and code. None of them needs you to attack your bot, and you need no special tools.

1. What is in the hidden context? (3 minutes)

Open wherever the system prompt lives: your server code, your chatbot builder's dashboard or a config file. Read it, and every knowledge file the bot can search, for keys, passwords, connection strings, internal addresses and rules you would not print on your site. OWASP's Hidden Context Exposure entry says to assume everything the model can see could reach a user, and the cheat sheet warns against relying on an instruction such as never revealing the prompt.

Then find where the model provider key lives. In an Expo project, every variable starting with EXPO_PUBLIC_ is, per the Expo docs, visible in plain text in the compiled app. On a website, search your built JavaScript files for the first characters of the key. A hit means detected: rotate the key and move the call to a server.

2. What can the bot do, and as whom? (3 minutes)

List every tool, function and integration: order lookup, email, refund, database read, web browsing. For each, write down the account it runs as. The NCSC principle is that a model processing input from a party should have only that party's privileges. A tool that uses an admin or service key for every visitor fails that. So does any write, send or spend action that runs without a person confirming it, which OWASP covers under Excessive Agency.

What about replies, cost and the text the bot reads?

3. What can a reply load or run? (3 minutes)

Find where reply text becomes something people see: a Markdown library, an HTML renderer, or a Markdown component in your Expo app. OWASP's Improper Output Handling entry says renderers that fetch images, link previews or iframes from model output can leak context through the request itself, and recommends turning auto-rendering off by default. If you need images, allow only origins you list.

On a website, open your page's response headers and look for a Content-Security-Policy with an img-src directive that lists your own domains. No header means the browser loads images from anywhere.

4. What can a stranger spend? (3 minutes)

Open your provider's billing page. OWASP's Unbounded Consumption entry recommends hard spending caps, because alerts alone can be outpaced, and limits by tokens rather than only requests. Check three things: a cap exists, each visitor is limited, and input length is bounded. An endpoint that needs no sign-in and has no limit lets anyone spend your budget. AI inside a Newly app uses credits, so the same applies there.

5. What outside text does the bot read? (3 minutes)

Write the list: contact-form entries, support emails, uploaded files, web pages, product reviews. Anyone can put words in those, and the bot reads them later for someone else. Barracuda reported on October 7, 2026 that emails hide instructions for AI assistants in HTML comments, invisible text and zero-width characters, and said the same tactic reaches support bots.

For each input, note which tools the bot holds while handling it. The Rule of Two, which OWASP's entry cites from Meta AI research, says an agent that combines untrusted input, sensitive data and the ability to change state or send data out needs a person to approve each action. Strip invisible characters on the way in and label the content as data.

Which defences help, and what do they leave open?

ControlWhat it limitsWhat it leaves open
Rules in the system promptSets intended behaviourOWASP says no reliable prevention exists, so it cannot be the only limit
Block-list of phrasesFeeds logs and rate limitsParaphrases, other languages and encoded text
A second model that screens inputAdds a layerIt can be attacked too, per the OWASP cheat sheet
Least privilege on toolsWhat a successful injection can reachWhat the bot says to the visitor
Output encoding and a CSPWhat a reply can run or loadWrong or misleading answers
Spend cap and per-visitor limitsCost and abuse volumeWhat the model says or does within the allowed budget
Human confirmationWrites, sends and spendsApproval fatigue when prompts are frequent

Anthropic's guidance for developers lists screening and prompt design, and also limiting the model's access to sensitive data and actions. The table puts the layers in the order that matters: the limits in your code come first.

Has this happened outside a demo?

Zenity Labs published SalesBleed on September 24, 2026. A public web form was the way in. Text from it sat until a staff member asked an agent to process the lead, and the agent could already read the CRM tables involved. A reply that the chat client fetched automatically carried data out. According to SecurityWeek, Salesforce confirmed the fixes by August 19 and said it had no evidence of exploitation against customers.

A smaller case: Eclipse Theia's AI chat rendered Markdown images from AI replies and sent requests to arbitrary external URLs. The advisory GHSA-qwjm-9c66-w4q4 (CVE-2026-22551, June 18, 2026) lists 1.71.0 as the fixed version. Both cases line up with checks 5, 2 and 3. CISA's May 1, 2026 guide names privilege creep among its four risks for agentic AI.

What a scan can and cannot see

The free scan on red.run.cloud reads what your site serves from outside, including keys in shipped bundles, security headers and routes without authentication. It cannot see your server-side prompt, your tools or your provider dashboard. Those stay unknown until you check them with the list above.

Where do you stand?

Mark each item. Everything starts as unknown, because that is what an unchecked item is. Move an item to confirmed only when you hold the evidence listed under it. Move it to detected when you found the problem, and fix it before you repeat the check.

Your chatbot self-test

  • Detected: You found the problem.
  • Unknown: Not checked yet, or the check could not tell.
  • Confirmed by owner evidence: You checked and kept the proof.
  1. 1. The system prompt and every file the bot can read hold no keys, passwords, connection strings or private pricing rules.

    Evidence: the prompt text and knowledge files, each read line by line, with a note of what you removed.

  2. 2. The model provider key lives on a server and appears in no page source, JavaScript file or app bundle.

    Evidence: a search of your built files for the start of the key, with zero hits, and the server setting where it lives.

  3. 3. Each tool runs with the visitor's own access, and anything that writes, sends or spends waits for a person to confirm.

    Evidence: the tool list, the account or role each tool uses, and the confirmation step for each write.

  4. 4. Replies cannot load images or iframes from arbitrary sites, and a CSP img-src limits where images come from.

    Evidence: the Content-Security-Policy header from your response and the renderer setting for images.

  5. 5. A hard spend cap is set at the provider, and each visitor is limited by tokens, not only by message count.

    Evidence: a screenshot of the cap and the code or setting that limits each visitor.

  6. 6. You have listed everything outsiders can write to that the bot later reads, and the bot cannot both read it and send data out.

    Evidence: the list of inputs, with the tools available when the bot handles each one.

0 detected6 unknown0 confirmed by owner evidence

Your answers stay in this browser tab. Nothing is saved or sent.

Frequently asked questions

Can I stop prompt injection completely?

No. OWASP's 2026 entry says no reliable prevention exists today, and the UK NCSC wrote in December 2025 that it may never be fully mitigated. The working approach is to limit what a successful injection can reach: no secrets in the prompt, narrow tools, checked output and capped spend.

Is a chatbot with no tools and no private data still a risk?

A smaller one. It can still say things you did not intend, run up your bill and, if its replies are rendered as Markdown, send conversation text to other sites through images. With no tools and no private data, the worst cases on this page shrink to wrong answers and cost.

Should I add a filter for words like "ignore previous instructions"?

A filter can feed logs and rate limits, but it is not a boundary. OWASP's cheat sheet says screening misses paraphrases, other languages and encoded text, and the NCSC advises against relying on deny-lists. Put the real limits in code outside the model.

Does my Newly app need this if the chatbot is on my website?

The website chatbot and an AI feature inside your app are separate systems with separate keys and limits, so test each one. Newly builds a real iPhone and Android app with React Native and Expo, and AI inside your app uses credits, so the cost check applies to the app too.

How often should I repeat the test?

Repeat it whenever you add a tool, a data source, a new place the bot reads from, or change the model or prompt. OWASP's cheat sheet recommends repeated test attempts within a set budget, so a single clean run proves little.

Can a scan tell me whether my chatbot is vulnerable?

Only part of it. The free scan on red.run.cloud reads what your site serves, such as keys in shipped bundles, security headers and open routes. It is a lookup and cannot judge what your model says or does behind your server. Treat everything it cannot see as unknown.

Sources

All sources were opened on October 24, 2026.

  1. LLM01:2026 Prompt Injection, OWASP GenAI Security Project
  2. LLM08:2026 Hidden Context Exposure, OWASP GenAI Security Project
  3. LLM10:2026 Improper Output Handling, OWASP GenAI Security Project
  4. LLM06:2026 Unbounded Consumption, OWASP GenAI Security Project
  5. LLM03:2026 Excessive Agency, OWASP GenAI Security Project
  6. OWASP Top 10 for LLM Applications 2026, OWASP GenAI Security Project
  7. LLM Prompt Injection Prevention Cheat Sheet, OWASP Cheat Sheet Series
  8. Prompt injection is not SQL injection, December 8, 2025, UK National Cyber Security Centre
  9. SalesBleed: 0-click data exfiltration on Agentforce, September 24, 2026, Zenity Labs
  10. SalesBleed flaws in Salesforce Agentforce, September 25, 2026, SecurityWeek
  11. GHSA-qwjm-9c66-w4q4 (CVE-2026-22551), June 18, 2026, GitHub Advisory Database
  12. Email attacks target both humans and AI assistants, October 2026, Barracuda
  13. ATT&CK v20 release, October 13, 2026, MITRE
  14. Careful Adoption of Agentic AI Services, May 1, 2026, CISA
  15. Environment variables in Expo, Expo docs
  16. Content-Security-Policy: img-src, MDN Web Docs
  17. Mitigate jailbreaks and prompt injections, Anthropic API docs

Continue Learning