2014-09-23 46 views
0

我們有一個php頁面,它是該網站的管理部分。它用於在數據庫上執行一些更新操作。代碼如下所示會話檢查繞過漏洞

session_start(); 
    if (!isset($_SESSION['somevariable'])) 
     { 
     header("Location:loginpage.php"); 
     } 



    $id=$_GET['somevariable]; 
$sql = "UPDATE sometable SET somecolumn='' where someothercolumn=?"; 
$stmt = $con->prepare($sql); 
$stmt->bind_param('s',$id); 
$stmt->execute(); 

我們已經注意到是一直存在的一些漏洞,這一段代碼似乎是從在週期性間隔(5秒),該犯規的運行未知來源似乎是有人管理部分的密碼並正在手動運行操作。

我們想知道黑客是否可以繞過此登錄檢查並執行其餘代碼而不必輸入密碼?對上述代碼中的漏洞的任何見解都將有所幫助。在此先感謝

+0

注意到代碼中缺少一個報價! – mithunsatheesh 2014-09-23 08:41:50

+0

@knittl關於攻擊者如何做到這一點以及如何避免攻擊的建議?將它改爲POST而不是獲得幫助? – 2014-09-23 08:47:21

+0

@MaximDsouza:[pouya darabi's answer](http://stackoverflow.com/a/25990765/112968)是正確的。 'header'不會停止腳本執行 – knittl 2014-09-23 09:06:23

回答

7

我看到兩個漏洞:

1)CSRF(直接使用可變從get方法)調用header函數

正確的代碼後

2)退出不使用應該是這樣的:

<?php 
header("Location: http://www.example.com/"); /* Redirect browser */ 

/* Make sure that code below does not get executed when we redirect. */ 
exit; 
?> 

見php.net文檔 Link

+0

即使重定向位於另一組代碼之前,下面的代碼是否可以執行?我的意思是出口不存在的情況? – 2014-09-23 08:51:50

+2

如果您不使用退出標題功能 您的代碼繼續執行 – 2014-09-23 08:54:41

+1

如果您確定瀏覽器得到重定向您必須在重定向代碼後使用退出! – 2014-09-23 08:55:34

0

如果管理員有一個活動的會話,並且黑客以某種方式發現他們的Cookie的價值,他們可以發送cookie並劫持會話。

請確保您使用SSL加密,讓別人難以竊聽連接並獲取cookie。

+0

我們非常確定,當攻擊發生時,管理員沒有登錄。 – 2014-09-23 08:44:50

+0

然後攻擊者必須以某種方式登錄。會話只有在PHP腳本創建時纔會創建。 – Barmar 2014-09-23 08:49:14