Cross-site Scripting (XSS) flaws occur whenever an application takes untrusted data and sends it to a web browser without proper validation or escaping. XSS allows attackers to execute scripts in the victim’s browser which can hijack user sessions, deface web sites, or redirect the user to malicious sites.
You are vulnerable if you do not ensure that all user supplied input is properly escaped, or you do not verify it to be safe via input validation, before including that input in the output page. Without proper output escaping or validation, such input will be treated as active content in the browser. If Ajax is being used to dynamically update the page, are you using safe JavaScript APIs? For unsafe JavaScript APIs, encoding or validation must also be used. Automated tools can find some XSS problems automatically. However, each application builds output pages differently and uses different browser side interpreters such as JavaScript, ActiveX, Flash, and Silverlight, making automated detection difficult. Therefore, complete coverage requires a combination of manual code review and penetration testing, in addition to automated approaches. Web 2.0 technologies, such as Ajax, make XSS much more difficult to detect via automated tools.
It is also called „HTML Injection“ by some but it actually is more like „HTML Injection + Scripting“. It usually happens when untrusted user input is printed on the web page, let us take a short example (no scripting):
– Vulnerable code : echo „Your name is: „ . $name ;
– User input: „Jack <a href=”“evilsite.com“”>Safe link</a>“
– User sees: Your name is: Jack Safe site
– User may be tricked!
Do not get fooled by the simplicity of the example.This is the most widespread attack currently although its not as severe as SQL Injection it can be pretty harmful depending on the case.
Stored XSS is the procedure where you attack once and it results always, for example the Script injection is saved on a comment and every users loads the malicious script while Reflected XSS is the procedure where you attack once and it results once.
Preventing XSS requires separation of untrusted data from active browser content.