PHP_SELF and XSS

  • 本文关键字:XSS and SELF PHP php xss
  • 更新时间 :
  • 英文 :


我找到一篇文章声称$_SERVER['PHP_SELF']容易受到XSS的攻击。

不确定我是否正确理解了它,但我几乎可以肯定它是错误的。

这怎么容易受到 XSS 攻击!?

<form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
  <!-- form contents -->
</form>

为了安全使用,您需要使用 htmlspecialchars() .

<?php echo htmlspecialchars($_SERVER["PHP_SELF"], ENT_QUOTES, "utf-8"); ?>

请参阅我写过的几乎所有PHP表单中的XSS漏洞,了解如何攻击$_SERVER["PHP_SELF"]

它确实是一个XSS漏洞。我确实理解您认为它可能不会损害您的网站,但这并不意味着它不是真实的。

如果您不相信,请尝试以下操作:

我们假设您有一个诸如"注册.php"之类的页面。我们假设您有一个表单,其中操作是:

<?php echo $_SERVER['PHP_SELF']; ?>

正如你确实放下的那样:

<form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
  <!-- form contents -->
</form>

现在只需附加下面的字符串

%27%22/%3E%3Cscript%3Ealert(1)%3C/script%3E

这实际上并不难理解,因为PHP_SELF URL 的反映,您的应用程序将读取您在 URL 中输入的任何内容并回显它。就这么简单。

htmlspecialchars应该处理此事,没有理由对证据提出异议。

<form method="post" action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']); ?>">
   <!-- form contents -->
</form>

然而,即使这是窃取饼干的第一步,也不是说它会自动发生。即使很容易制造攻击(因为攻击者会在您的网站上注册并会看到 cookie 的外观......等),一系列其他因素必须成立才能达到饼干窃取情况的地步。例如,cookie 不得过期。这取决于饼干的复杂程度。也许您在服务器上放置了其他预防措施,它不必都是基于cookie的存在进行身份验证!

虽然我确实相信满足所有条件都是相当困难和非常糟糕的编程(即使yahoo.mail例如有这样的漏洞,如果你在互联网上查看,你甚至会发现漏洞利用和cookie解码器),XSS是真实的,谁知道如果您的网站遭受它,狡猾的攻击者可能会做什么。治疗方法很简单...

您链接的文章为您提供:

http://www.example.com/form.php/%22%3E%3Cscript%3Ealert(‘xss attack’)%3C/script%3E%3Cbr%20class=%22irrelevant

有什么不清楚的?

编辑:这是一种XSS攻击,因为我可以隐藏从我的网站到您的网站的链接,并在URL中添加一些JS,该URL向我发送您的cookie,因此当您单击该链接的那一刻,您就是pwnd。

你应该使用 filter_input() 来访问 PHP 中的超全局变量。如果将筛选器设置为 FILTER_SANITIZE_FULL_SPECIAL_CHARS它将去除 XSS 中常用的不安全字符。举个例子:

<form method="post" 
    action="<?php filter_input(INPUT_SERVER, 'PHP_SELF', FILTER_SANITIZE_FULL_SPECIAL_CHARS); ?>">
<!-- form contents -->
</form>

该漏洞是用户可以在表单中输入恶意的JavaScript代码。为了防止这种情况,使用了htmlspecialchars函数。

预定义字符(如>、<、"、"')转换为实体(> <等)>

htmlspecialchars($_SERVER["PHP_SELF"]) 确保所有提交的表单变量都转换为实体。

要了解有关此漏洞的更多信息,请访问:https://www.w3schools.com/php/php_form_validation.asp

另一个可以帮助您的链接:https://www.google.com/amp/s/www.bitdegree.org/learn/php-form-validation/amp

我正在研究有关PHP_SELF变量和XSS攻击的问题。有些事情我仍然无法理解:PHP_SELF变量应该引用脚本文件(正在运行的脚本)的名称。那么,为什么它从 URL 中获取其值?(允许 XSS 问题)。

最新更新