WeChall - CGX#11 - Cross Site Scripting
Challenge
CGX#11 演示一个简单的 Cross-Site Scripting 漏洞。payload 用于验证漏洞,但最终提交的不是 JavaScript payload,而是“如何安全输出用户输入”的 PHP 函数名。
Solution
反射型 XSS 验证 payload:
1 | <script>alert(1)</script> |
如果输入被放在 HTML 属性中,可以尝试先跳出属性:
1 | "><script>alert(1)</script> |
修复思路是在输出用户输入时做 HTML escaping。PHP 中常用函数是:
1 | echo htmlspecialchars($input, ENT_QUOTES | ENT_SUBSTITUTE, 'UTF-8'); |
ENT_QUOTES 同时转义单双引号,避免属性上下文逃逸。
本题的提交值是函数名:
htmlspecialchars