3 回答

TA貢獻1784條經驗 獲得超8個贊
在客戶端檢查數據、驗證數據和其他內容的好處是:
提醒普通用戶他/她的狀態不佳(用戶被告知其訂閱到期)。(結果:用戶體驗)
減少服務器負載。當防止普通用戶向服務器發送無效數據時。(普通用戶在發現訂閱已過期時不會向服務器發送額外的數據)(結果:資源節省和性能)
但檢查服務器端是一項義務,因為有非常規用戶(修改 Js、使用 Postman、機器人、入侵者發布數據)可能會在不干預的情況下發送 Http 請求,并且驗證客戶端代碼可能會濫用您的系統。
客戶端是敵人的戰場
總結一下:
您必須在服務器端驗證數據以防止任何濫用。
但建議也在客戶端 驗證數據,以提高整個系統的性能。
例如在你的情況下:
在服務器端:
檢查過期時間=>
如果已經過期=>
返回 403 錯誤:
{message:"expired"}
在客戶端:
如果出現 403 錯誤
{message:"expired"}
。=>重定向用戶。

TA貢獻1772條經驗 獲得超8個贊
你永遠不應該相信客戶端的任何東西。
最重要的是,服務器時間和客戶端時間可能不同。
那么問題來了,你的訂閱開始時間是基于客戶端時間還是服務器時間?(這應該是服務器時間,因為我們不應該信任客戶端)
最安全的方法是讓您的服務器返回訂閱是否有效(即 true/false);
如果為 false,則導航('/subscription-expired')
最重要的是,每個頁面都應該包含相同的支票。

TA貢獻1829條經驗 獲得超4個贊
您的用戶是否可以操縱 JavaScript 代碼,或者只是在計算機上設置了錯誤的日期和時間?當然可以。會有那么關鍵嗎?在您的情況下,您只想將用戶重定向到另一個頁面,因此這并不重要,但它會影響對您的應用程序的信任,因為在某些情況下它會以意想不到的方式運行,并在以下情況下說訂閱已過期它不是(或者說它沒有過期)。
如果您的后端信任客戶端提供當前日期而不進行驗證,那么這可能會更加重要,因為您的數據可能會被偽造,并且您的業務規則可能會被繞過。
這取決于用例,但一般來說,您不應將new Date()
瀏覽器視為事實來源。你的后端仍然是真相的持有者。
添加回答
舉報