2017-04-26 11 views
1

我想知道數據連接到主鍵的數據是否存在差異(安全性或性能或不正確的做法)。因此,基本上可以說你有一個這樣的數據庫:影響連接到外鍵的數據的方式之間的差異

用戶

id | username | password 

帖子

id | post | user_id 

現在讓我們說我們有一個鏈接給用戶的帖子。例如,我們有一個刪除帖子的頁面。

DELETE FROM posts where id=5; 

現在只是執行這樣的缺陷,你可以操縱GETid作爲用戶:所以當你點擊刪除按鈕,我們將運行這樣例如查詢。

我學會防止這種情況的方法是通過再次檢查該帖子的用戶ID是否與當前使用PHP和另一個查詢登錄的用戶的ID相同。

但我最近嘗試另一種方式僅僅改變這樣的查詢:

DELETE FROM posts where id=5 and userid=1; 

如果你想知道一個消息,如果你刪除了文件,你可以只讓受影響的行數。我的朋友告訴我這是非常糟糕的做法,我可以看到存在,但比第一種方法更糟糕的是什麼? (假設在這兩種情況下都會防止sql注入)。總體差異是什麼?

+0

你是說你會傳遞用戶ID作爲get參數嗎?還是你說你會從登錄用戶獲得用戶ID? –

+0

@AdamForbis我正在談論在AND部分的查詢中添加用戶標識。因此,當有人操縱帖子的ID(試圖刪除其他人的帖子)時,它不會刪除它,因爲它也會自動檢查登錄用戶的user_id。因此,從登錄用戶獲取用戶ID – Loko

+0

會你有沒有需要處理一個管理員帳戶可以刪除該帖子的情況?然後他們不會有相同的用戶ID。 –

回答

0

您可以切換到使用GUID,這是不容易猜測。請閱讀https://blog.codinghorror.com/primary-keys-ids-versus-guids/,其中提供了更多信息。

+0

我真的不明白。操作系統要求在兩個安全機制之間,你建議從安全轉換到默默無聞? –

+0

對不起 - 猜測低值整數(甚至兩個值) - 不安全,試圖猜測一個GUID - 通過默默無聞的安全性! –

+0

我的意思是,首先猜猜這些東西的ID有什麼問題?此外,如果它是某種發佈系統,ID可能會公開,您只需要瀏覽索引:) –