PHP_SELF和 XSS

2022-08-30 12:24:35

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

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

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

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

答案 1

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

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

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


答案 2

它确实是一个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 不得过期。比这要看饼干的复杂程度。也许您在服务器上放置了其他预防措施,它不必基于cookie的存在进行所有身份验证!

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


推荐