PHP_SELF漏洞

什么是PHP_SELF變量市框?

PHP_SELF是一個返回正在執(zhí)行的當(dāng)前腳本的變量沪么。此變量返回當(dāng)前文件的名稱和路徑(來自根文件夾)上忍。您可以在FORM的操作字段中使用此變量。您還需要注意某些漏洞诱咏。我們將在本文中討論所有這些要點。
我們現(xiàn)在看一些例子缴挖。
echo $_SERVER['PHP_SELF'];
a)假設(shè)您的php文件位于以下地址:
http://www.yourserver.com/form-action.php
在這種情況下袋狞,PHP_SELF將包含:
"/form-action.php"
b)假設(shè)您的php文件位于以下地址:
http://www.yourserver.com/dir1/form-action.php
對于此URL,PHP_SELF將為:
"/dir1/form-action.php"

在表單的action字段中使用PHP_SELF變量

PHP_SELF變量的常見用法是在<form>標(biāo)記的action字段中。當(dāng)用戶按下“提交”按鈕時苟鸯,F(xiàn)ORM的操作字段指示提交表單數(shù)據(jù)的位置同蜻。通常與表單的處理程序具有相同的PHP頁面。
但是早处,如果您在操作字段中提供文件的名稱湾蔓,以防您碰巧重命名該文件,則還需要更新操作字段; 或者你的表格將停止工作陕赃。
使用PHP_SELF變量卵蛉,您可以編寫更多通用代碼,可以在任何頁面上使用么库,而無需編輯操作字段傻丝。
考慮一下,你有一個名為form-action.php的文件诉儒,并希望在提交表單后加載相同的頁面葡缰。通常的表單代碼是:
<form  method="post" action="form-action.php" >
我們可以使用PHP_SELF變量而不是“form-action.php”。代碼變成:
<form name="form1" method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>" >

“form-action.php”的完整代碼

這是組合代碼忱反,包含表單和PHP腳本泛释。
<?php
if(isset($_POST['submit'])) 
{ 
    $name = $_POST['name'];
    echo "User Has submitted the form and entered this name : <b> $name </b>";
    echo "<br>You can use the following form again to enter a new name."; 
}
?>
<form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
   <input type="text" name="name"><br>
   <input type="submit" name="submit" value="Submit Form"><br>
</form>
此PHP代碼位于HTML部分之上,將首先執(zhí)行温算。第一行代碼是檢查表單是否已提交怜校。提交按鈕的名稱是“提交”。按下提交按鈕時注竿,$_POST['submit']將設(shè)置并且IF條件將變?yōu)檎媲炎隆T谶@種情況下,我們顯示用戶輸入的名稱巩割。
如果表單未提交裙顽,IF條件將為FALSE,因為沒有值$_POST['submit'] 宣谈,PHP代碼將不會被執(zhí)行愈犹。在這種情況下,僅顯示表單闻丑。

什么是PHP_SELF漏洞以及如何避免它們

PHP_SELF變量用于獲取當(dāng)前文件的名稱和路徑漩怎,但黑客也可以使用它。如果在頁面中使用了PHP_SELF嗦嗡,則用戶可以輸入斜杠(/)扬卷,然后輸入一些跨站點腳本(XSS)命令來執(zhí)行。
<form name="test" action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
現(xiàn)在酸钦,如果用戶在地址欄中輸入了正常的URL怪得,
http://www.yourdomain.com/form-action.php
則上述代碼將被翻譯為:
<form name="test" action="form-action.php" method="post">
這是正常情況咱枉。
現(xiàn)在考慮用戶通過在瀏覽器的地址欄中輸入以下URL來調(diào)用此腳本:
http://www.yourdomain.com/form-action.php/"><script>alert('xss')</script><foo"
在這種情況下,PHP處理后代碼變?yōu)椋?/h5>
<form name="test" method="post" action="form-action.php"/>
<script>alert('xss')</script><foo"">

您可以看到此代碼添加了腳本標(biāo)記和警報命令徒恋。加載此頁面后蚕断,用戶將看到一個警告框。這只是一個如何利用PHP_SELF變量的簡單示例入挣。
可以在“script”標(biāo)記之間添加任何JavaScript代碼亿乳。<script>....HERE....</script>。黑客可以鏈接到可能位于另一臺服務(wù)器上的JavaScript文件径筏。例如葛假,該JavaScript文件可以保存可以改變?nèi)肿兞康膼阂獯a,也可以將表單提交到另一個地址以捕獲用戶數(shù)據(jù)滋恬。

一個有趣的練習(xí)



當(dāng)我們的注入落在標(biāo)記屬性上時聊训,我們試圖突破它而沒有成功,因為關(guān)閉標(biāo)記并開始新標(biāo)記所需的大于號(>)被替換為減號( - ):
因此恢氯,我們將嘗試使用事件處理程序來使用內(nèi)聯(lián)注入:
再次沒有成功带斑,但這次是因為javascript塊(第11行到第17行)清理了每個字符串,其中“on”后跟或不是間隔符(%09勋拟,%0A勋磕,%0C,%0D或%20)和document.location.href(第15行)中的等號(=)敢靡,即處理URL的屬性挂滓。
javascript函數(shù)eventFilter()在文檔主體加載時調(diào)用(第3行),操作在運(yùn)行時構(gòu)建的頁面(參見 DOM)啸胧,因此盡管它在源上正確反映赶站,但注入不起作用
但是如果我們創(chuàng)建一個任意屬性并且只是保持其值打開,那么注入后的所有代碼都將被更改為其值:

這樣吓揪,只有當(dāng)瀏覽器的HTML解析器找到下一個單引號(')時才會關(guān)閉“1”屬性亲怠,該引用位于“不要做壞事”這個短語上所计。我們注入的表單標(biāo)記將在下一個大于符號(>)中關(guān)閉柠辞,該標(biāo)記位于</ h6>標(biāo)記中。
輸入字段與提交按鈕一起消失主胧,javascript函數(shù)完全禁用(全部從第8行到第18行)叭首。因為在頁面中沒有更多元素可以交互,“style”屬性也被“ - ”替換踪栋,我們不能在我們的目標(biāo)標(biāo)記之后注入任何東西焙格,我們無法觸發(fā)我們提供的事件處理程序
所以這是最后一招。在當(dāng)前的Firefox瀏覽器中夷都,我們有以下處理程序眷唉,在源代碼中只需要一個腳本塊來觸發(fā)它們:

onafterscriptexecute

onbeforescriptexecute

在頁面的congrats.js腳本中
我們只能使用后者:
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子冬阳,更是在濱河造成了極大的恐慌蛤虐,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,214評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件肝陪,死亡現(xiàn)場離奇詭異驳庭,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)氯窍,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評論 2 382
  • 文/潘曉璐 我一進(jìn)店門饲常,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人狼讨,你說我怎么就攤上這事贝淤。” “怎么了熊楼?”我有些...
    開封第一講書人閱讀 152,543評論 0 341
  • 文/不壞的土叔 我叫張陵霹娄,是天一觀的道長。 經(jīng)常有香客問我鲫骗,道長犬耻,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,221評論 1 279
  • 正文 為了忘掉前任执泰,我火速辦了婚禮枕磁,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘术吝。我一直安慰自己计济,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 64,224評論 5 371
  • 文/花漫 我一把揭開白布排苍。 她就那樣靜靜地躺著沦寂,像睡著了一般。 火紅的嫁衣襯著肌膚如雪淘衙。 梳的紋絲不亂的頭發(fā)上传藏,一...
    開封第一講書人閱讀 49,007評論 1 284
  • 那天,我揣著相機(jī)與錄音彤守,去河邊找鬼毯侦。 笑死,一個胖子當(dāng)著我的面吹牛具垫,可吹牛的內(nèi)容都是我干的侈离。 我是一名探鬼主播,決...
    沈念sama閱讀 38,313評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼筝蚕,長吁一口氣:“原來是場噩夢啊……” “哼卦碾!你這毒婦竟也來了铺坞?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,956評論 0 259
  • 序言:老撾萬榮一對情侶失蹤洲胖,失蹤者是張志新(化名)和其女友劉穎康震,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體宾濒,經(jīng)...
    沈念sama閱讀 43,441評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡腿短,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,925評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了绘梦。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片橘忱。...
    茶點故事閱讀 38,018評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖卸奉,靈堂內(nèi)的尸體忽然破棺而出钝诚,到底是詐尸還是另有隱情,我是刑警寧澤榄棵,帶...
    沈念sama閱讀 33,685評論 4 322
  • 正文 年R本政府宣布凝颇,位于F島的核電站,受9級特大地震影響疹鳄,放射性物質(zhì)發(fā)生泄漏拧略。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,234評論 3 307
  • 文/蒙蒙 一瘪弓、第九天 我趴在偏房一處隱蔽的房頂上張望垫蛆。 院中可真熱鬧,春花似錦腺怯、人聲如沸袱饭。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,240評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽虑乖。三九已至,卻和暖如春晾虑,著一層夾襖步出監(jiān)牢的瞬間疹味,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,464評論 1 261
  • 我被黑心中介騙來泰國打工走贪, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留佛猛,地道東北人惑芭。 一個月前我還...
    沈念sama閱讀 45,467評論 2 352
  • 正文 我出身青樓坠狡,卻偏偏與公主長得像,于是被迫代替她去往敵國和親遂跟。 傳聞我的和親對象是個殘疾皇子逃沿,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,762評論 2 345

推薦閱讀更多精彩內(nèi)容