Web Application Security

Break and defend web apps โ€” the OWASP Top 10, hands-on

20 lessons ยท CHF 9.90 one-time

20 lessons ยท knowledge checks ยท final exam ยท verifiable certificate ยท in-browser Live-Lab

Buy now ยท CHF 9.90 Open in the course reader

Frequently asked questions

What is the single idea behind most web vulnerabilities?

Untrusted input reaching a dangerous sink without being neutralised for that context. A sink is a SQL query, HTML output, a file path, or a shell command. The fix always matches the sink: parameterise for SQL, encode output for HTML, and allow-list for file paths.

Why can't I trust client-side validation?

Because an attacker removes the browser from the loop and sends the request directly with a proxy or curl. Length limits, dropdowns, and required fields in the page are user-experience features. Only checks the server enforces on hostile input actually protect anything.

What is the OWASP Top 10 and how is it used here?

The OWASP Top 10 is the industry reference list of the most critical web application risk categories, such as broken access control and injection. This course attacks and then fixes a representative member of each category on intentionally vulnerable lab targets.

Is it legal to practise web hacking?

Only against systems you own or are explicitly authorised to test, such as your own lab target or a bug-bounty program whose written scope permits it. Testing anyone else's live site without permission is a crime under computer-misuse laws in most countries.

What tools do I need for this first lesson?

An intercepting proxy to read and edit requests, and a command-line HTTP client such as curl to send precise requests and read full responses including headers and cookies. Everything in this lesson works against your own lab target.

Why do prepared statements prevent SQL injection?

The database compiles the fixed query text first and attaches user values to placeholders afterwards, so a value is never parsed as SQL syntax. Placeholders only bind values, though: table names, column names and ORDER BY direction cannot be bound and need an allow-list instead.

Get the full course

One-time purchase, no subscription. Pay as a guest โ€” no account needed.

Buy now ยท CHF 9.90 Open in the course reader

Course syllabus

Lessons unlock after a single one-time purchase โ€” no subscription. Pricing & FAQ โ†’ ยท All course overviews โ†’