3 回答

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

TA貢獻(xiàn)1772條經(jīng)驗(yàn) 獲得超8個(gè)贊
你永遠(yuǎn)不應(yīng)該相信客戶端的任何東西。
最重要的是,服務(wù)器時(shí)間和客戶端時(shí)間可能不同。
那么問題來(lái)了,你的訂閱開始時(shí)間是基于客戶端時(shí)間還是服務(wù)器時(shí)間?(這應(yīng)該是服務(wù)器時(shí)間,因?yàn)槲覀儾粦?yīng)該信任客戶端)
最安全的方法是讓您的服務(wù)器返回訂閱是否有效(即 true/false);
如果為 false,則導(dǎo)航('/subscription-expired')
最重要的是,每個(gè)頁(yè)面都應(yīng)該包含相同的支票。

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