我使用這個編輯表單,讓用戶編輯自己的崗位/筆記等等,我有事情是這樣這樣說:如果有人玩弄和改變「390Adwk」喜歡的東西當允許他人編輯內容時,地址欄中的帖子ID#是否存在安全風險?
www.domain.com/editpost.php?id=390Adkw
因此「 「390dkjdkljfld」它會弄亂內容或更糟糕的是,它會改變別人的內容。
它會搞砸,因爲當我將更新它會像這樣:更新此處id = id,它可能會搞砸了。
那麼有什麼辦法來防止這種使用PHP?
我使用這個編輯表單,讓用戶編輯自己的崗位/筆記等等,我有事情是這樣這樣說:如果有人玩弄和改變「390Adwk」喜歡的東西當允許他人編輯內容時,地址欄中的帖子ID#是否存在安全風險?
www.domain.com/editpost.php?id=390Adkw
因此「 「390dkjdkljfld」它會弄亂內容或更糟糕的是,它會改變別人的內容。
它會搞砸,因爲當我將更新它會像這樣:更新此處id = id,它可能會搞砸了。
那麼有什麼辦法來防止這種使用PHP?
在editpost頁面內,你需要做兩件事。在GET請求期間,您需要檢查請求該ID的特定用戶是否有權訪問它。
在POST期間,您需要再次檢查該特定用戶是否有權編輯它。
總之,不要只因爲他們通過了一個ID,因爲他們有權使用該ID進行任何操作。
不信任用戶的輸入。總是檢查用戶的權限服務器端,如果他們不允許改變它,不要讓他們這樣做
無論如何,您都需要將id嵌入到某處。該網址與其他網站一樣好。您需要有適當的服務器端檢查,以確保用戶只能編輯允許的內容。如果這樣做,用戶直接操作ID並手動導航到記錄並點擊Edit按鈕並沒有區別。即他可以以任何方式編輯記錄。
在您的數據庫中,您需要將該帖子,評論等鏈接到發佈該帖子的用戶。然後,在發送該請求時,檢查想要編輯帖子的用戶是否是創建該帖子的用戶,或者檢查他是否有足夠權限編輯該帖子。
如果用戶使用帖子變量混淆,運行該帖子將會使這些帖子難以被不需要的用戶編輯。
你有認證嗎? –
使用PHP阻止這種情況的一種方法是使用GET變量_ONLY_進行讀取,不允許寫入,就像它的意圖。最重要的是有某種用戶發佈關係約束,以便不允許用戶訪問或修改其他用戶的帖子。 – Shef
@Shef構建URL最爲REST式的方式就像'/ post/42/edit'。即使對於POST請求,也將URL嵌入到URL中是完全「有意」的。 – deceze