亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在客戶端比較訂閱到期日期和當前日期是否安全?或者這可以被操縱嗎?

在客戶端比較訂閱到期日期和當前日期是否安全?或者這可以被操縱嗎?

拉風的咖菲貓 2023-07-06 10:13:38
我從后端獲取一些數據,這些數據告訴我用戶訂閱的到期日期。如果這個日期是過去的日期,我會將用戶導航到其他地方,這樣她就無法登錄:  if (expirationDate.getTime() < new Date().getTime()) {         navigate('/subscription-expired')   }我想知道在客戶端上進行這樣的比較檢查是否安全?這可以被操縱嗎?
查看完整描述

3 回答

?
青春有我

TA貢獻1784條經驗 獲得超8個贊

在客戶端檢查數據、驗證數據和其他內容的好處是:

  • 提醒普通用戶他/她的狀態不佳(用戶被告知其訂閱到期)。(結果:用戶體驗)

  • 減少服務器負載。當防止普通用戶向服務器發送無效數據時。(普通用戶在發現訂閱已過期時不會向服務器發送額外的數據)(結果:資源節省和性能)

但檢查服務器端是一項義務,因為有非常規用戶(修改 Js、使用 Postman、機器人、入侵者發布數據)可能會在不干預的情況下發送 Http 請求,并且驗證客戶端代碼可能會濫用您的系統。

客戶端是敵人的戰場

總結一下:

必須在服務器端驗證數據以防止任何濫用。

建議也在客戶端 驗證數據,以提高整個系統的性能。

例如在你的情況下:

  • 在服務器端:

    • 檢查過期時間=>

    • 如果已經過期=>

    • 返回 403 錯誤:{message:"expired"}

  • 在客戶端:

    • 如果出現 403 錯誤{message:"expired"}。=>

    • 重定向用戶。


查看完整回答
反對 回復 2023-07-06
?
料青山看我應如是

TA貢獻1772條經驗 獲得超8個贊

你永遠不應該相信客戶端的任何東西。

最重要的是,服務器時間和客戶端時間可能不同。

那么問題來了,你的訂閱開始時間是基于客戶端時間還是服務器時間?(這應該是服務器時間,因為我們不應該信任客戶端)

最安全的方法是讓您的服務器返回訂閱是否有效(即 true/false);

如果為 false,則導航('/subscription-expired')

最重要的是,每個頁面都應該包含相同的支票。


查看完整回答
反對 回復 2023-07-06
?
浮云間

TA貢獻1829條經驗 獲得超4個贊

您的用戶是否可以操縱 JavaScript 代碼,或者只是在計算機上設置了錯誤的日期和時間?當然可以。會有那么關鍵嗎?在您的情況下,您只想將用戶重定向到另一個頁面,因此這并不重要,但它會影響對您的應用程序的信任,因為在某些情況下它會以意想不到的方式運行,并在以下情況下說訂閱已過期它不是(或者說它沒有過期)。

如果您的后端信任客戶端提供當前日期而不進行驗證,那么這可能會更加重要,因為您的數據可能會被偽造,并且您的業務規則可能會被繞過。

這取決于用例,但一般來說,您不應將new Date()瀏覽器視為事實來源。你的后端仍然是真相的持有者。


查看完整回答
反對 回復 2023-07-06
  • 3 回答
  • 0 關注
  • 194 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號