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

Django Rest Framework中模拟CSRF攻击遇阻及相关疑问

关于CSRF攻击场景构建的问题

环境与配置

  • 本地部署两个Django应用,分别通过localhost:8000(目标应用)和127.0.0.1:5000(恶意站点)访问,二者不共享Cookie。
  • 目标应用API视图ModifyDB(仅允许已认证用户访问):
class ModifyDB(APIView):
    
    def post(self,request,format=None):
       
        if request.user.is_authenticated:
            return Response({'db modified'})

        else:
            return Response({'you need to be authenticated'})
  • 恶意站点触发攻击的axios请求代码:
const Modify = () => {

    const onClick = async e => { e.preventDefault();
        
        const instance = axios.create({
            withCredentials: true,
            baseURL: 'http://localhost:8000',
            headers: {
                'Accept': 'application/json',
                'Content-Type': 'application/json',
            }
         })
         
        const res = await  instance.post('/api/modifydb');
        return res.data
    }

  return (
    <button class = 'btn' onClick = {onClick}> send request </button>
  )
}
  • 目标应用认证相关配置:
    • REST框架认证类配置:
    REST_FRAMEWORK = {
        
        'DEFAULT_AUTHENTICATION_CLASSES': [
         
            'my_proj.settings.CsrfExemptSessionAuthentication',
           
        ],
    }
    
    • 自定义关闭CSRF防护的认证类:
    class CsrfExemptSessionAuthentication(SessionAuthentication):
    
        def enforce_csrf(self, request):
            return 
    
    • 已禁用django.middleware.csrf.CsrfViewMiddleware,且CORS_ALLOW_ALL_ORIGINS和CORS_ALLOW_CREDENTIALS均设为true。

核心问题

登录目标站点后,恶意站点的axios请求返回“you need to be authenticated”响应,预期应携带sessionid Cookie并请求成功,请问问题出在哪里?

更新尝试

用表单请求替代axios请求:

<form action="http://localhost:8000/api/modifydb" method="POST">    
    <input type="submit" value="make a malicious request"/>
</form>

添加SESSION_COOKIE_SAMESITE = None配置后,表单请求成功,但原axios请求仍失败。

后续疑问

  1. 表单提交的POST请求和axios发起的POST请求,在Cookie附加逻辑上有什么差异?
  2. 启用SESSION_COOKIE_SAMESITE配置能否完全阻止这类CSRF攻击?

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 15:39:36