【发布时间】:2021-07-07 00:27:54
【问题描述】:
我正在研究跨站脚本 (XSS) 漏洞,这里有个问题:
如果有 str_replace "
if (isset($_GET["username"])) {
$user = str_replace("<", "", $_GET["username"]);
echo "Your name is "."$user";
}
您是否仍然可以传入<b onmouseover=alert('Ha-Ha-Ha!')>click me!</b> 或<script>alert('Ha-Ha-Ha')</script> 以便脚本执行?
【问题讨论】:
-
让我完成回避这个问题并问为什么您使用 GET 参数作为用户名而不是使用会话管理?当他们登录时,PHP 应该能够将他们的登录名与他们的用户名匹配,并且您根本不需要 $_GET ,您应该能够从他们的活动会话中检索当前用户的名称就可以了。如果您询问的是“一般”(即任何 GET 值会回显到页面输出中),那么最好不要让它看起来像是在询问用户数据。
-
因为我在这里通过了 OWASP 易受攻击的 XSS github.com/OWASP/Vulnerable-Web-Application/blob/master/XSS/…
-
这不是答案。您的示例 hinge 在用户名上吗?如果是这样,这是无稽之谈,您应该使用会话管理来获取用户信息。阅读the PHP manual on sessions 并进行练习。如果没有,并且只是将 $_GET 变量复制到 PHP 回显/打印中,请更改您的帖子以反映这一点。现在,您正在给出一个非常具体的示例,它的解决方案与您的问题完全无关。这使得这是一个糟糕的问题:更新您的帖子以澄清您的要求。