2015-12-21 39 views
0

使用PHP會話變量來防止用戶編輯隱藏/輸入字段值是一個好主意/好習慣嗎?舉例來說,可以說我有以下字段:使用PHP會話阻止字段編輯

<input type="hidden" object_id="1" /> 
<input type="text" object_id="2" /> 
etc... 

我需要對前端object_id所以我可以告訴數據庫條目需要在用戶提交(提供他們有權採取行動,以操縱其在數據上)。 $_SESSION變量看起來像[obj_id = 1, obj_id = 2]。部分授權過程確保用戶試圖採取行動的所有條目都存在於會話中。如果存在一些差異(例如,具有object_id="3"的元素),則該用戶未被授權。

是否有解決方案更廣泛接受或做類似的事情通常就足夠了?

+1

如果它存儲在會話中,爲什麼還要在隱藏字段存儲?如果他們不允許修改有問題的元素,爲什麼還要以可能允許更改的形式存儲?我會說這通常是不好的做法。你應該重新考慮你的應用程序流程。 – steve

+1

^我同意已經在會話中的東西不屬於隱藏字段。爲什麼?如果您依賴於GET或POST變量而不是這些會話,則會造成安全災難。 – developerwjk

+0

人們應該問自己,誰擁有這種狀態?如果您爲了獲得預期的功能而不得不跳過箍環,那麼您可能試圖將狀態存儲在不屬於的地方。用戶會話應包含用戶會話數據。沒有更多,沒有更多。 – steve

回答

0

通常,您仍然需要信任最終用戶爲您提供要修改的正確數據。在這種情況下,您唯一可以驗證的是提供的值看起來像要插入到數據庫中的有效數據,這通常是數據庫作業本身,因爲有效數據是數據庫表的狀態以確定。

有很多方法可以解決這個問題。除非我更瞭解你想做什麼,否則我無法提供完善的詳細解決方案。

祝你好運

+0

我會在這裏發表評論以包含我們的對話,因爲我還有一件事要問。那麼用戶輸入的所有數據都是有效的,但用戶編輯'object_id'的情況怎麼樣,以便他們觸及他們有權修改的數據庫條目,但不應該在此上下文中修改? – mcon

+0

@mcon需要對軟件設計本身進行深入的討論。我會很樂意擁有它,但評論不是這個地方:) – steve

+0

同意;評論不是這種討論的地方。我決定讓我的授權過程更徹底,以便我可以一起避免會話。我會接受你的建議和建議的答案。謝謝!聽起來明智的@mcon – mcon