Redis 应用中的防盗链和防刷屏技巧

阅读时长 10 分钟读完

在互联网应用中,常常需要对数据进行访问限制,以保护公司和用户的利益。其中最常见的两种限制,分别是防盗链和防刷屏。

防盗链

防盗链是指防止未经授权的第三方网站链接引用自己的资源。通过盗链,用户可以在未经授权的情况下,利用我们的带宽和存储资源。防盗链技术可以有效的避免这种情况的发生。

在前端领域中,我们可以通过设置 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

纠错
反馈