Cross-Site Scripting (XSS) Testing
Manual cross site scripting testing across Europe: reflected, stored and DOM XSS, CSP review and bypass, real account-takeover impact. Free retest.
Cross scripting testing finds the places where your application reflects attacker-controlled input back into a page and lets it run as code in your users’ browsers. We test all three types by hand, prove the real impact, and show whether your Content Security Policy would actually contain it.
People underrate cross-site scripting because the textbook example is a harmless alert box. The reality is uglier. A stored XSS in a support ticket or a profile field runs in an administrator’s browser the moment they open it, and with their session it can create accounts, change settings or quietly steal every token on the page. SafetyBis is a European offensive-security team, and our engineers hold OSCP and OSWE. We test XSS the way an attacker would weaponise it, not as a checkbox.
What cross-site scripting testing covers
XSS comes in three shapes with different mechanics, and a real test covers all of them along with the defences meant to stop them. Here is the scope of a thorough cross site scripting testing engagement.
The three types, and why they differ
Reflected XSS fires from a crafted link and needs a victim to click it, so it pairs naturally with phishing. Stored XSS is worse: the payload sits in your database and runs for everyone who views the affected page, no link required. DOM-based XSS never touches the server at all, living entirely in JavaScript that writes untrusted data into the page. Each needs a different test, and a tool tuned for one commonly misses the others.
Context is everything
The same input can be safe in one place and dangerous in another. Reflected inside an HTML body it needs one payload, inside a tag attribute another, inside a block of JavaScript another again. We identify the exact context of each reflection and craft a payload that fits it, which is why we find the injections that a generic scanner, blind to context, reports as clean.
How our cross scripting testing works
The work is manual and led by engineers, with Burp Suite for intercepting and replaying requests and manual analysis of the client-side code for DOM sinks. Automated tools help enumerate reflection points; a person decides which ones actually execute and what they can be turned into.
Finding injection points
We map every input that ends up on a page: query parameters, form fields, headers, JSON values, filenames and anything rendered from the URL. Each is probed with a marker to see where and how it is reflected, and whether the output is encoded, partially encoded or passed straight through.
Confirming execution
A reflection is only a vulnerability if it runs. We escalate from a harmless marker to a context-appropriate payload that proves script execution, using a benign proof rather than anything disruptive. For stored XSS we confirm which users would trigger it, because a payload that fires in the admin panel is a different severity from one that only affects the person who submitted it.
DOM analysis
DOM-based XSS needs the JavaScript read, not just the responses watched. We trace how the app moves data from sources like location.hash into sinks like innerHTML, and confirm the path an attacker controls. This is where framework apps hide their XSS, and where scanners are weakest.
Testing your defences
Finding the injection is half the job. The other half is whether your defences would stop it in the real world.
Content Security Policy
A good CSP can neuter an XSS even when one exists. We review yours for the weaknesses that make it decorative: unsafe-inline, over-broad host allowlists, and JSONP endpoints on trusted domains that let an attacker load script anyway. Then we tell you exactly how to tighten it.
Filters and WAF
Input filters and web application firewalls give a false sense of safety when they block the obvious payloads and miss the creative ones. We test evasion so you learn whether the control is real protection or a speed bump.
What XSS actually lets an attacker do
We demonstrate impact, because “there is an alert box” convinces nobody to prioritise a fix.
Session and account takeover
If your session cookie lacks the HttpOnly flag, XSS reads it directly and hands the attacker the account. Even with HttpOnly, a script running in the page can act as the user: change the account email, add an attacker’s device, or fire off state-changing requests behind the scenes.
Credential theft and content injection
XSS can overlay a fake login prompt, log keystrokes, or rewrite what the page shows. In a banking or checkout flow the attacker does not need your password if they can alter the destination account in the browser after you have logged in.
Chaining to CSRF and privilege escalation
The nastiest cases combine flaws. A stored XSS in a field an admin reviews runs with admin privileges, and from there it can perform any action the admin can, including creating new admin accounts. That single chain turns a “medium” input bug into full application compromise.
What you get: the deliverables
Executive summary
A plain-language read on whether your users’ sessions and your admin panel can be hijacked through the browser, and what that would cost you.
Technical report
Each finding lists the injection point, the XSS type, the exact payload, the context, a CVSS score, business impact, reproduction steps and a specific fix, with output encoding and CSP guidance rather than a fragile blocklist.
Free retest
After your team applies the fixes we re-test every finding at no charge and confirm the payload no longer executes, in every context where it fired.
Want this tested on your own systems?
Free 20-minute scoping call, a fixed price with no hourly surprises, and a free retest once you fix what we find.
Compliance and standards
OWASP
Cross-site scripting sits within the OWASP Top 10 injection category, and our testing maps to it and to the relevant OWASP ASVS output-encoding requirements, giving your developers a recognised structure for the fixes.
PCI DSS, ISO 27001, SOC 2 and GDPR
PCI DSS requirement 6 names cross-site scripting among the flaws you must address, and ISO 27001, SOC 2 and GDPR expect demonstrable testing of applications handling sensitive data. The report and attestation letter are written to support these.
The finding teams always dismiss until we show it
A pattern repeats on almost every engagement. We report a stored XSS in some unglamorous field, a display name, an internal note, an uploaded filename, and the initial reaction is that it is low priority because “only staff see it”. That is exactly the problem. Staff see it in an authenticated admin context, so the payload runs with more privilege than any external attacker could hope for on their own. We demonstrate the payload creating a new admin user, and the priority changes in the meeting. The lesson we keep relearning is that XSS severity is decided by who views the page, not by how the input was submitted, and that judgement is something only a human tester makes.
Frameworks and rendering layers we test
Where untrusted data can reach the DOM depends on the technology, and knowing each framework’s escape hatches is how we go straight to the risky code.
Server-rendered templates
PHP, Java and .NET templates that echo variables without encoding are the classic reflected and stored vectors. We check each output point for the right context-aware encoding rather than trusting that the framework does it everywhere by default.
React, Angular and Vue
Modern frameworks escape by default, which lulls teams into complacency. The exceptions are the danger: dangerouslySetInnerHTML in React, bypassSecurityTrust in Angular, v-html in Vue. We audit each use of these against untrusted data, since they are where DOM XSS survives in an otherwise safe app.
Rich text and markdown
Anywhere users submit formatted content, a sanitiser stands between them and stored XSS. We test that sanitiser hard, because a single allowed attribute or an unfiltered SVG can reopen the whole class of bug.
Why manual XSS testing beats a scanner
Scanners are decent at simple reflected XSS and poor at almost everything else. Stored payloads that only fire in another user’s context, DOM-based flaws buried in JavaScript, context-specific injections and anything behind a filter routinely evade them. Worse, a scanner cannot show impact, so its findings get dismissed as low. A person confirms the injection, demonstrates the account takeover, and makes the case for the fix. As a cross site scripting testing provider, that demonstrated impact is what turns a finding into action.
Pricing
Pricing follows scope: how many inputs and user-visible surfaces exist, whether testing spans multiple roles, and whether CSP and filter evasion are in scope. Here is the shape of a typical European engagement.
| Engagement | What’s included | Timeline | Price |
|---|---|---|---|
| Essential | XSS-focused test of a single application, reflected and stored coverage, one role, full report and free retest | 3–5 working days | from €2,500 |
| Standard | Full application with several roles, reflected, stored and DOM XSS, CSP review and filter evasion, executive and technical report | 5–8 working days | €3,500–€8,000 |
| Advanced | Complex app, deep DOM analysis, attack-chaining to account takeover and admin compromise, CSP hardening guidance | 8–12 working days | €8,000–€20,000 |
| Compliance add-on | Framework mapping and attestation letter for PCI DSS, ISO 27001, SOC 2 or GDPR | with any tier | from €800 |
| Custom / large estate | Several applications or a full environment, scoped to what you run | on scoping | custom |
Every engagement is fixed-price, quoted after a free 20-minute scoping call, with no hourly surprises and a retest included. Get a fixed quote
FAQ
How much does cross-site scripting testing cost?
How long does the test take?
Do you test all three types of XSS?
We have a WAF and a CSP. Do we still need testing?
Can you show real impact rather than just an alert box?
Does this satisfy PCI DSS or ISO 27001?
Is a retest included?
Are the findings confidential?
Related services
Applications that display user-supplied content, run rich JavaScript front ends, or have an admin panel where staff review user data, and any team that needs proof its XSS defences and Content Security Policy hold up against a real attacker.
Security you can prove
The same standard on every engagement, big or small.
Evidence, not opinions
Every finding ships with a reproduction and proof of concept — no vague "maybe vulnerable".
Humans over scanners
Certified engineers find the logic flaws and chained attacks automated tools walk straight past.
Fixed price, free retest
You know the cost up front, and verifying the fix is part of the deal — not a second invoice.
Ready to lock this down?
Free scoping call, fixed price, free retest. Tell us what you're running and we'll take it from there — usually within one business day.
Tell us what you're running
Scoping is free. We reply within one business day, and under 30 minutes for active incidents.