Emitted when user-controlled input that can contain HTML can be passed into an echo
statement.
This could lead to a potential Cross Site Scripting (XSS) vulnerability. Using a XSS vulnerability, an attacker could inject malicious JavaScript and execute any action JavaScript could do. Examples include:
- Stealing authentication material (e.g. cookies, JWT tokens)
- Exfiltrate sensitive information by reading the DOM
- Keylog entries on the website (e.g. fake login form)
Whether this is exploitable or not depends on a few conditions:
- Is an executable mimetype set? (e.g.
text/html
) - Is the content served inline or as attachment? (
Content-Disposition
) - Is the output properly sanitized? (e.g. stripping all HTML tags or having an allowlist of allowed characters)
<?php
$name = $_GET["name"];
printName($name);
function printName(string $name) {
echo $name;
}
- Sanitize user-input by using functions such as
htmlentities
or use an allowlist. - Set all cookies to
HTTPOnly
. - Consider using Content Security Policy (CSP), to limit the risk of XSS vulnerabilities.
- If user input itself is HTML, see Sanitizing HTML User Input