Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
TsMask opened this issue May 13, 2023 · 10 comments

Comments

@TsMask
Copy link

TsMask commented May 13, 2023

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 方法请求做拦截
      },

...
@czy88840616
Copy link
Member

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

@TsMask
Copy link
Author

TsMask commented May 13, 2023

嗯,普通的 refer 验证

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

@czy88840616
Copy link
Member

是的,会有 refer 策略

@TsMask
Copy link
Author

TsMask commented May 13, 2023

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

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

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

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

@czy88840616
Copy link
Member

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

@TsMask
Copy link
Author

TsMask commented May 14, 2023

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

@czy88840616
Copy link
Member

周一上班团队讨论一下。

@echosoar
Copy link
Member

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

@TsMask
Copy link
Author

TsMask commented May 15, 2023

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

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

@TsMask
Copy link
Author

TsMask commented May 16, 2023

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Development

No branches or pull requests

3 participants