2015-07-22 61 views
1

有沒有什麼方法可以讓用戶在PHP中改變代碼的優勢?假設他們有我的網頁的完整源代碼。PHP可變黑客

// make the connection 
$dbhost = 'localhost'; 
$dbuser = 'user'; 
$dbpass = 'password'; 
$db = "db"; 
$conn = new PDO("mysql:host=$dbhost;dbname=$db", $dbuser, $dbpass); 
// set errors 
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

// get the data 
$stmt = $conn->prepare("select username from usernames where " . $number . " = '$session'"); 
$stmt->execute(); 
$row = $stmt->fetch(); 
$username = $row[0]; 

if ($username == "superuser") { 
// code to view secure information and make changes to people accounts 
} 

有什麼辦法可以將他們的用戶名更改爲「超級用戶」?

我計劃能夠快速瀏覽和編輯人的帳戶詳細信息的安全代碼的一部分客戶的服務選擇,所以我不希望一些隨機的用戶能夠查看和編輯其他用戶的數據。

感謝

+5

'$ number'和'$ session'設置在哪裏? – D4V1D

+0

請嘗試在您的瀏覽器中使用例如按Ctrl-U。你看到PHP代碼嗎? –

+0

請參閱http://stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection-in-php?rq=1。您可以接受SQL注入。 – chris85

回答

7

標識真的建議修復您的SQL,只是用PDO並不能保證安全,在SQL的身體任何使用PHP變量應避免

"select username from usernames where " . $number . " = '$session'" 

這是不安全的或者

"select username from usernames where " . $number . " = :session" 

如果$number成爲username = 'superuser' --

,會發生什麼
"select username from usernames where username='superuser' -- = :session" 

之後的任何內容--在sql中的評論很像在\\在php中。突然之間我是個超級用戶。是的,它可以而且確實很容易發生。

這是正確的做法,

"select username from usernames where session_id = :session" 

不知道什麼$number是,該點是在SQL身體沒有PHP變量插值。我討厭上軌道(不偷偷地愛上它),但正確使用PDO是必不可少的。我從網頁上發佈的'ASC''DESC'命令看到代碼,並且沒有將任何想法注入到PDO中,並且它不再像以前那樣安全,因爲他們認爲它是安全的。

例如

"select username from usernames where username=1 order by $order" 

想想,如果順序是這樣

"Desc; Drop table usernames;" 

你可以與如果過濾數據就像發生了什麼,然後例如

if(strtoupper($_POST['order']) == 'DESC'){ 
     $order = 'DESC'; 
}else{ 
     $order = 'ASC'; 
} 

但你必須當你在任何形式的sql中使用一個php變量時,要非常小心。這通常是最好的避免。你會注意到在上面的用戶數據永遠不會被放到sql中,它只在評估if條件時使用。

確定爲手頭的實際問題,我會完全分離的管理部分,單獨的用戶表,單獨的會話數據,獨立的一切。這裏有幾個原因,最重要的是你不必擔心管理功能泄漏到一個普通的用戶帳戶。如果登錄會話分開存儲,則以管理員和用戶身份登錄會更容易。例如,您可以將管理鏈接登錄爲(用戶),而無需知道其密碼。您可以記錄管理員操作而不會受到用戶數據的污染。您可以擁有各種級別的管理員用戶,同樣不用擔心普通用戶可以訪問此功能,因爲他們是分開的。做正確的工作是一項重要的工作。

或可我legitly打造超級用戶帳戶,所以我可以從一個帳戶來訪問我的網站

這並不意味着來存儲他們的信用卡號碼,然後在他們偷看裏面的數據,但它是你的網站(你可以自己決定),這是暗示的,當然有一些限制,比如有人來到你的房子,你不能搶奪他們或者在他們不知道的情況下出售他們的個人信息......他們有一定的安全期望,例如對於如何處理購買和賬單信息的某種期望。但是,如果是出於支持或合法商業原因,那麼只需要很好的客戶支持來查看他們的工作情況(以登錄類型的能力)。現在以他們身份登錄並運行賬單通常會被壓低,但你明白了。

+1

php中的一個班輪實際上是'//''不是'''''''。 – Spooky

+0

@Spooky - 就這樣。我在那篇文章中責怪閱讀障礙, – ArtisticPhoenix

+0

感謝@ArtisiticPhoenix,所以如果我修正了mysql代碼,他們應該沒有辦法讓別人修改$ username。無論如何,你對整個客戶支持事物的態度是什麼,現在它只是我自己,所以我更加安全的去瀏覽服務器中的.sql,或者我可以合法地構建超級用戶帳戶我可以從我的網站內的帳戶訪問數據? –

0

在將數據傳遞給SQL語句之前,可以使用filter_values()。