midway icon indicating copy to clipboard operation
midway copied to clipboard

bug(@midwayjs/security): 期望对csrf中referer进行请求方法拦截的配置

Open TsMask opened this issue 2 years ago • 10 comments

image

需求描述

关于这个referer的允许请求方法能不能配置一个控制放行方法的参数, 如:refererMethodIgnores

有些时候需要配置接口只对某个站点域名开放,get,optons请求都不允许

issues #2916 ,版主他请求接口应该是get的请求,所以通过refere没r拦截下来

CWE-293 使用Refer域进行认证

配置步骤

组件 @midwayjs/security 根据Midway官网配置 config.default.ts

...

    security: {
      csrf: {
        enable: true,
        type: 'referer',
        refererWhiteList: ['127.0.0.1:3000'],

        refererMethodIgnores: ['get', 'optons'], // 不对 get 和 options 方法请求做拦截
      },

...

TsMask avatar May 13 '23 13:05 TsMask

这个感觉和 csrf 关系不大啊,就是普通的 refer 验证?

czy88840616 avatar May 13 '23 13:05 czy88840616

嗯,普通的 refer 验证

建议单独一个 refer 的配置,不和csrf混用开关了

TsMask avatar May 13 '23 13:05 TsMask

是的,会有 refer 策略

czy88840616 avatar May 13 '23 13:05 czy88840616

我的想法是加个refer 策略配置如下:

 security: {
      referer: {
        enable: true,
        value: ['127.0.0.1:3000'], // 必传,拦截的地址域

        // 没有或不传method默认全部拦截
        method: ['get', 'optons'], // 可选,指定拦截的请求方法
      },
}

security包里中间件加个 refer.ts 去处理 referer部分,csrf中的type:any/all可去掉了

TsMask avatar May 13 '23 13:05 TsMask

目前 security 更多的是安全头的配置,后面会加的是 referrer-policy/p3p,你要的 referrer 还不是策略的一种,是请求的一些自定义逻辑,建议加一个全局中间件使用逻辑进行处理。

czy88840616 avatar May 13 '23 14:05 czy88840616

我先用中间件处理,不过我是希望 security 中可以把 referer 的配置加上允许请求方法拦截自选,安全请求范围其中的 get option 也属于防盗链要求

TsMask avatar May 14 '23 06:05 TsMask

周一上班团队讨论一下。

czy88840616 avatar May 14 '23 06:05 czy88840616

referer 我感觉不应该放在安全里面,考虑搞个反爬组件?再把“css字体混淆反爬”功能加上?在 SSR 反爬领域可以用上

echosoar avatar May 15 '23 08:05 echosoar

referer 防盗链控制,web安全漏洞接口扫描会有提示。

反爬应该需要根据业务逻辑进行定制,css字体混淆这个属于自定义的功能。

TsMask avatar May 15 '23 08:05 TsMask

csrf.middleware.ts 可以拆开csrf.middleware.ts和referer.middleware.ts

refererPolicy.middleware.ts 可以归类到 referer.middleware.ts

csrf 防跨站请求伪造, referer防恶意请求。

methodNotAllowed.middleware.ts 感觉没必要,都是通过@Methoad声明的,且允许两三个@Methoad。

就算 @All 表示能接受以上所有类型的 HTTP Method,可以在对routerOptions拓展一个属性ignoreMethod来限制

@All('/',{ignoreMethod:['trace', 'track']}) 
// 405 Method Not Allowed

TsMask avatar May 16 '23 05:05 TsMask