You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django中对帖子浏览量统计端点使用@csrf_exempt是否安全?

关于帖子浏览量统计端点使用@csrf_exempt的安全性分析

直接给结论:不建议给这个端点加@csrf_exempt,原因和替代方案如下:

为什么不安全?

  • 虽然当前逻辑只是给帖子浏览量+1,看似无风险,但恶意网站可通过诱导用户访问(比如嵌入隐藏请求)或直接批量发起请求刷假浏览量,破坏数据真实性,影响平台内容热度计算。
  • 另外,一旦未来这个端点逻辑变更(比如新增和用户账号绑定的操作),@csrf_exempt会直接留下未授权操作的安全漏洞,后续维护容易踩坑。

更安全的替代方案

1. 改用GET请求

浏览量统计属于幂等性的统计操作,用GET请求更符合HTTP语义,而且GET请求天然不需要CSRF验证(浏览器同源策略和CSRF防护逻辑,主要针对会修改状态的POST/PUT/DELETE等请求)。
注意要点:

  • 后端返回响应时设置禁止缓存的头,避免浏览器缓存请求导致统计不准:
    response = HttpResponse(status=200)
    response["Cache-Control"] = "no-cache, no-store, must-revalidate"
    response["Pragma"] = "no-cache"
    response["Expires"] = "0"
    return response
    

2. 保留POST但不用@csrf_exempt

如果业务上必须用POST,前端可以从页面的meta标签里获取CSRF令牌,请求时放在X-CSRFToken请求头里,后端保持默认的CSRF验证即可:

  • 页面meta标签:
    <meta name="csrf-token" content="{{ csrf_token }}">
    
  • 前端请求示例(用axios):
    axios.post(`/posts/${slug}/view`, {}, {
      headers: {
        'X-CSRFToken': document.querySelector('meta[name="csrf-token"]').content
      }
    })
    

3. 增加请求频率限制

不管用哪种请求方式,都要给这个端点加限流规则,比如限制同一个IP每分钟最多请求10次,从根源上防止批量刷量,保证浏览量数据的真实性。

内容的提问来源于stack exchange,提问作者Allen Ye

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 19:15:58