Home/Services/Cross-Site Scripting (XSS) Testing
security service

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.

Manual, expert-ledEvidence-based findingsFree remediation 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.

Reflected XSS in search, error messages, redirects and any input echoed straight back
Stored XSS in profiles, comments, tickets, filenames and admin-visible fields
DOM-based XSS in client-side sinks like innerHTML, document.write and framework bindings
Context-aware payloads for HTML, attribute, JavaScript, URL and CSS injection points
Content Security Policy review and practical bypass of weak or misconfigured policies
Filter and WAF evasion to confirm whether a control genuinely blocks the attack
Impact demonstration: session theft, account takeover and admin action via CSRF chaining

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.

48h
typical time to first critical findings
3
XSS types tested: reflected, stored and DOM
Free
retest once you have applied the fixes

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.

Get a fixed quote

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.

Get a fixed quote

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?
It starts from €2,500 for an XSS-focused test of a single application and scales with the number of inputs, roles and whether CSP and filter evasion are in scope. You get a fixed cross scripting testing cost after a free scoping call.
How long does the test take?
A focused engagement runs 3–8 working days plus the report, depending on the size of the application and the number of user-visible surfaces. Critical findings are reported the same day.
Do you test all three types of XSS?
Yes. We test reflected, stored and DOM-based cross-site scripting, and DOM analysis in particular is manual work that scanners handle badly.
We have a WAF and a CSP. Do we still need testing?
Yes, arguably more so. We test whether your WAF can be evaded and whether your CSP is strong enough to contain an XSS, or whether unsafe-inline and broad allowlists have quietly made it decorative.
Can you show real impact rather than just an alert box?
Yes, and we prefer to. We demonstrate session theft, account takeover or admin compromise with a benign proof, so the finding is understood as the risk it is, not dismissed as cosmetic.
Does this satisfy PCI DSS or ISO 27001?
Yes. Cross-site scripting is named in PCI DSS requirement 6, and the report and attestation letter support PCI DSS, ISO 27001, SOC 2 and GDPR. Tell us your framework and we align the deliverables.
Is a retest included?
Yes, free. After you deploy the fixes we re-test every finding and confirm the payload no longer executes in any context where it previously fired.
Are the findings confidential?
Always. We work under NDA, handle all evidence securely, and share the report only with the people you name.

Related services

Who needs this

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.

why safetybis

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.

500+
assessments delivered
<30min
incident first response
12k+
infections removed
98%
fixed within one retest
$ safetybis quote --service "Cross-Site Scripting (XSS) Testing"

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.

get in touch

Tell us what you're running

Scoping is free. We reply within one business day, and under 30 minutes for active incidents.