[英]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.