2011-11-28 113 views
2

我想知道是否$_POST & $_GET可能存在安全問題。

比方說,我有一個數據具有以下發送到PHP文件中的AJAX代碼:

if(isset($_POST['id'])) { 
    $client_id = mysql_real_escape_string($_POST['id']); 
    $client_name = mysql_real_escape_string($_POST['name']); 

    //Delete the Client 
    $sql="DELETE FROM clients WHERE id='".$client_id."'"; 
    mysql_query($sql) or die(mysql_error()); 

    //Client Pages Delete 
    $sql="DELETE FROM fanpages WHERE client='".$client_name."'"; 
    mysql_query($sql) or die(mysql_error()); 

現在讓我們假設PHP文件名是delete.php任何用戶都可以隨便寫類似delete.php?id=423&name=Jack,它會大聲詢問並刪除客戶端?

我在考慮在開始時加入COOKIE檢查,但據我所知COOKIE也可能是假的,對嗎?

那麼什麼是解決方案使用DB權限的組合來製作安全的$_POST & $_GET請求?

編輯:所有這一切都發生在一個用戶密碼保護的區域內,但我問的唯一delete.php文件,我需要一個cookie檢查添加到該文件中呢?

EDIT2:腳本與COOKIE的不是SESSIONS一起工作,我是否應該將SESSIONS添加到系統中?是否有必要在同一個系統上使用Cookie和會話?

+0

你必須做出某種身份驗證。如果你沒有這個,任何人都可以簡單地輸入網址(就像你說的)並執行更改。你應該有一些代碼,會話,密碼 - 在你的網站上。這將增加安全性。 – OptimusCrime

+0

您可以輕鬆創建自己的獲取和帖子。修改帖子並不難,但顯然比使用get更難。 PDO可以阻止SQL注入,但您仍然需要檢查用戶是否有權執行某些查詢。所以在你的情況下,你需要看看用戶是否可以真正運行該查詢。 – Matt

+0

您需要在每個需要保護的文件中添加會話檢查。 –

回答

2

訣竅是正確地轉義數據並防止SQL injections。如果涉及到刪除用戶,並且想要更加安全,則可能需要登錄或其他內容。

session_start(); 

// ... 

if (true === $_SESSION['userLoggedIn']) { 
    // your code 
} 

當然,這將需要您在提交登錄表單後創建某種認證過程。 (例如查詢MySQL數據庫,並針對用戶的表測試的用戶名和密碼)

Here is a great example!

+0

請參閱EDIT2。 COOKIE也可以安全嗎?或者我也會進行SESSION授權? – Ricardo

+0

如果你真的願意,你也可以使用cookie。認證過程幾乎是一樣的,只是你不再需要'session_start()',你可以在用戶通過認證之後使用'setcookie()',而不是在$ _SESSION中設置一個值.. –

+0

聽說COOKIE的可以被僞造是真的嗎? – Ricardo

1

你應該只允許登錄的客戶端發出那樣的sensative請求。 使用會話 在文件的開始,你會做session_start();

然後你會檢查$ _SESSION [「用戶名」],如果它是空的,那麼你不會刪除它,但如果用戶名在那裏(你將在登錄時設置),那麼你會驗證用戶有幸做這項手術。

+0

腳本正在與COOKIE的不SESSIONS,我應該添加SESSIONS到系統以及?是否有必要在同一個系統上使用Cookie和會話? – Ricardo

+1

使用會話時,實際的數據保留在服務器上(只有會話ID在cookie中),不能僞造,但cookie數據將保存在可僞造的客戶機上。 –

1

此主題針對的是會話,但我敢打賭,您的Cookie不安全,因爲現在。竊取cookie非常簡單。你應該做的會議,但你需要確保你的會話路徑是私有的,你是不是讓人們劫持會話等

PHP Session Security