You need to enable JavaScript to run this app. 为何VSCode扩展REST Client可绕过CORS规则访问我的Django API
优惠活动
大模型
产品
解决方案
定价
更多

为何VSCode扩展REST Client可绕过CORS规则访问我的Django API

CORS认知误区澄清

CORS 是浏览器同源策略下的安全限制机制,仅对运行在浏览器中的前端页面生效:

  • 浏览器会主动在跨域请求时携带Origin请求头,并且校验响应的CORS头是否符合规则,不符合就会抛出跨域错误拦截响应
  • 非浏览器客户端(包括VSCode REST Client、Postman、curl、爬虫脚本等)不会执行CORS校验逻辑,既不会主动限制请求发送,也不会校验响应头,所以可以直接拿到接口返回结果
  • 你用django-cors-headers配置的规则,完全没有拦截非浏览器请求的能力,它的作用只是告诉浏览器哪些跨域请求是合法的
实际接口防护方案

要限制这类非浏览器客户端的访问,需要用真正的服务端访问控制手段,常见方案如下:

  • 身份认证校验
    给所有接口增加身份认证逻辑,仅携带有效凭证的请求可以访问。Django生态下可以直接用djangorestframework的认证能力,示例配置:
    # settings.py
    REST_FRAMEWORK = {
        'DEFAULT_AUTHENTICATION_CLASSES': [
            'rest_framework.authentication.TokenAuthentication',
            'rest_framework.authentication.SessionAuthentication',
        ],
        'DEFAULT_PERMISSION_CLASSES': [
            'rest_framework.permissions.IsAuthenticated',
        ]
    }
    
    配置后没有携带有效Token或者Session的请求,不管什么客户端都会直接返回401未授权错误。
  • 请求频率限制
    针对未认证的请求配置频率限制,避免接口被恶意爬取或攻击。可以用DRF自带的限流能力,或者django-ratelimit中间件实现:
    # settings.py REST_FRAMEWORK 配置补充
    'DEFAULT_THROTTLE_CLASSES': [
        'rest_framework.throttling.AnonRateThrottle',
        'rest_framework.throttling.UserRateThrottle'
    ],
    'DEFAULT_THROTTLE_RATES': {
        'anon': '10/minute',
        'user': '100/minute'
    }
    
  • 请求签名校验
    如果接口仅给你自己控制的客户端调用,可以约定签名规则:客户端将请求参数、时间戳、双方约定的密钥拼接后做哈希生成签名,请求时携带签名和时间戳,服务端用相同规则生成签名比对,不匹配直接拒绝。这种方式即使对方拿到接口地址,没有密钥也无法生成合法签名。
  • IP白名单限制
    如果接口仅需要特定IP段访问,可以直接在Nginx层面配置IP白名单,或者写Django中间件校验请求IP,不在白名单的IP直接返回403禁止访问。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.13 03:12:03