在互联网应用中,常常需要对数据进行访问限制,以保护公司和用户的利益。其中最常见的两种限制,分别是防盗链和防刷屏。
防盗链
防盗链是指防止未经授权的第三方网站链接引用自己的资源。通过盗链,用户可以在未经授权的情况下,利用我们的带宽和存储资源。防盗链技术可以有效的避免这种情况的发生。
在前端领域中,我们可以通过设置 HTTP Referer 验证防止防盗链。在服务器端,可以通过以下四种方法来防止盗链:
1. HTTP Referer 验证
利用 HTTP Referer 在 HTTP 请求头中的特性,来判断请求来自哪个来源页面。只有请求来源符合我们设定的白名单,才允许其访问资源。
-- -------------------- ---- ------- ----- ----- - ----------------- ----- ------ - --------------------- ----- ---------------- - ----------------------------- ----------------------------- -------- ------------------ ---- ----- - ----- ------- - ---------------------- -- ------------------------ -- ------- ------ ------- -- ---------- ------ ---------------------------------- -- ------------------------------------- ------ ---------------------------------- ------- - ----------------- -------------- ----- ---- -- - -- ---------- ---
2. 时间戳验证
在 URL 中添加一个时间戳参数,逐渐递增。当请求到达服务器时,对时间戳进行校验。只有时间戳符合我们设定的规则,才允许节点访问资源。
-- -------------------- ---- ------- ----- ----- - ----------------- ----- ------ - --------------------- ----- --------------- - -- - -- -- - ---- ----- --------- - ------------------ -------- ------------------- - ----- ------------ - --------------- ------ ---------- --- ----------------- - -- - ------------------------------ - -------- -------------------- ---- ----- - ----- ----- - ------------------------ ----- --------- - ------------------------------ ----- --------- - -------------------- -- ------------------ ------ ---------------------------------- -- ------------- ---------------- - ---- - ---------- - ---------------- ------ ---------------------------------- ----- ----------------- - --------------------------- ------------------------------------------------------------------- -- ---------- --- ------------------ ------ ---------------------------------- ------- - ----------------- ---------------- ----- ---- -- - -- ---------- ---
3. Token 验证
在 URL 中添加一个 Token 参数,逐渐递增,防盗链节点需要使用 Token 才能解析资源。
-- -------------------- ---- ------- ----- ----- - ----------------- ----- ------ - --------------------- ----- --------------- - -- - -- -- - ---- ----- --------- - ------------------ -------- ---------------- ---- ----- - ----- ----- - ------------------------ ----- ----- - -------------------------- -- -------------- ------ ---------------------------------- -- -------------------- ------ ---------------------------------- ------- - ----------------- ------------ ----- ---- -- - -- ---------- ---
4. Referrer-Policy 来控制 Referer
在 Express 应用中开启 Referrer-Policy 来进行 Referer 控制。
-- -------------------- ---- ------- ----- ------- - ------------------ ----- --- - --------- ------------- ---- ----- -- - -------------------------------- --------------- ------- --- ----------------- ----- ---- -- - -- ---------- ---
防刷屏
防刷屏是指在一段时间内限制用户请求,以避免用户过于频繁地请求。这能够保护我们的服务器免受拒绝服务攻击(DDoS)及其他恶意行为。
在前端领域中,我们可以通过以下方法来防止防刷屏:
1. Token Bucket
Token Bucket 算法是一种限流算法,其基本思想是对请求进行计数,当计数超过预设值时,拒绝访问资源,同时等待下一个 Token。Token Bucket 算法非常适合在 Redis 中实现。
-- -------------------- ---- ------- ----- ----- - ----------------- ----- ------ - --------------------- ----- ------------ - ---- -- ---------------- ----- --------------- - -- -- ----- --------------- ----- ------------- - --- -- -- ----- ----- ----- ----------- - --- -- ---- -------- ---------------- --------- - -------------- ---------------- -- -- ------ --------------- ------------- -- -- ------ ------- ------ -------------- ----------- -------- -- - -- ----- ------ -------------- ----- ------------ ---------- - -------- --- ---------------- ----- ---------- - ------------- ----- ---------- - ------------- - ---------------- ----- --- - ----------- ----- ------------ - ---------- -- ------------------------------- -- -------------- - --------------- - -------------------------- - ---------- - ----- - -------------------------- - ------ ------------ - ---- - --------------- - ----------- - ----- --------------- - -- -- ---------------- -- ---------------- - -------------- ------------- --------- --------------- - ---------------- ------------- ----------------- ---- ---------------- ----------- - ----- -- ----- ----------- -- - -- ----- ------ -------------- -------------- ------ --- - ---- - -------------- ------- - --- - -------------------- ----- ---- -- - ------------------------------ ----- --------------- -- - -- ----- ------ ------------------------------ ------ -------- -- ----------------- ------ ------------------------- ---- ----------- -- ------ --- ---
2. Sliding Window
Sliding Window 算法是一种限流算法,其基本思想是对请求进行计数,并且在时间滑窗移动时,对计数进行清零。Sliding Window 算法也非常适合在 Redis 中实现。
-- -------------------- ---- ------- ----- ----- - ----------------- ----- ------ - --------------------- ----- ------------ - ---- -- ---------------- ----- ----------- - --- -- ---- -------- ----------------------- --------- - -------------- ------------------- ------- ------- ---------------------- ------- ---------- - ---- - ------------ ----------- ----------- -------- -- - -- ----- ------ -------------- ----- ----- - ----------------- - -------- -------------- ------------------ --- - -------------------- ----- ---- -- - --------------------------------------------- ----- ---------------- -- - -- ----- ------ ------------------------------ ------ -------- -- ---------------- - ------------- ------ ------------------------- ---- ----------- -- ------ --- ---
总结
通过上述介绍,我们可以了解到,在 Redis 应用中,有很多防盗链和防刷屏的技巧。以上,两种算法都可以保护服务器安全,让客户端得到更好的体验。我们可以根据实际情况选择不同的算法。在开发过程中,需要珍惜每一个算法,并灵活地合理应用。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6476ac92968c7c53b0354664