【问题标题】:Is there any possibility to do XSS if there is str_replace?如果有str_replace,有没有可能做XSS?
【发布时间】:2021-07-07 00:27:54
【问题描述】:

我正在研究跨站脚本 (XSS) 漏洞,这里有个问题:

如果有 str_replace "

if (isset($_GET["username"])) {
    $user = str_replace("<", "", $_GET["username"]);
    echo "Your name is "."$user";
}

您是否仍然可以传入&lt;b onmouseover=alert('Ha-Ha-Ha!')&gt;click me!&lt;/b&gt;&lt;script&gt;alert('Ha-Ha-Ha')&lt;/script&gt; 以便脚本执行?

【问题讨论】:

  • 让我完成回避这个问题并问为什么您使用 GET 参数作为用户名而不是使用会话管理?当他们登录时,PHP 应该能够将他们的登录名与他们的用户名匹配,并且您根本不需要 $_GET ,您应该能够从他们的活动会话中检索当前用户的名称就可以了。如果您询问的是“一般”(即任何 GET 值会回显到页面输出中),那么最好不要让它看起来像是在询问用户数据。
  • 因为我在这里通过了 OWASP 易受攻击的 XSS github.com/OWASP/Vulnerable-Web-Application/blob/master/XSS/…
  • 这不是答案。您的示例 hinge 在用户名上吗?如果是这样,这是无稽之谈,您应该使用会话管理来获取用户信息。阅读the PHP manual on sessions 并进行练习。如果没有,并且只是将 $_GET 变量复制到 PHP 回显/打印中,请更改您的帖子以反映这一点。现在,您正在给出一个非常具体的示例,它的解决方案与您的问题完全无关。这使得这是一个糟糕的问题:更新您的帖子以澄清您的要求。

标签: php xss owasp


【解决方案1】:

未指定字符集,因此可能有一些方法可以使用不同的编码绕过过滤器。在旧版浏览器中,可以使用 UTF-7,如下所述:http://michaelthelin.se/security/2014/06/08/web-security-cross-site-scripting-attacks-using-utf-7.html

【讨论】:

    【解决方案2】:

    使用htmlspecialchars()方法

    • 这个功能你所需要的
    function test_input($data) {
      $data = trim($data);
      $data = stripslashes($data);
      $data = htmlspecialchars($data);
      return $data;
    }
    

    【讨论】:

    • 重点是如何克服str_replace("
    • - 抱歉,我没有使用 xss 的经验,但我认为现在有太多方法可以从 XSS 中保存您的服务器,所以很难找到一种方法来做到这一点,因为您没有控制服务器 - 我希望你能找到方法
    • 1.这并不能防止所有形式的 xss,并且修剪与 xss 或一般输入无关。 2.这不应该在输入上运行,xss是输出编码问题。 3. post 在 xss 方面并不比 get “更安全”。
    猜你喜欢
    • 2017-08-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-20
    • 1970-01-01
    • 2011-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多