簡體   English   中英

PHP_SELF 和 XSS

[英]PHP_SELF and 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漏洞。 我知道您認為它可能不會損害您的網站,但這並不意味着它不是真實的。

如果您不相信,請嘗試以下操作:

我們假設您有一個頁面,例如“registration.php”。 我們假設您有一個表單,其中的 action 是:

<?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 不能過期。 這取決於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,因此當您單擊該鏈接時,您就是密碼。

您應該使用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 問題)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM