我正在设置Stripe以使用我的sails.js服务器,并且为了使用Stripe的webhook,我需要为我提供给Stripe的URL禁用CSRF。
是否可以在sails.js中使某些URL免于CSRF POST要求?我可以为CSRF找到的唯一配置是全局启用它,并查看csrf挂钩(https://github.com/balderdashy/sails/blob/master/lib/hooks/csrf/index.js)的源代码,看起来如果我尝试提供自定义对象,它就会被替换为无论如何全球设置。
由于
答案 0 :(得分:7)
因此,通过阅读问题中链接的csrf钩子后,我设法解决了这个问题。
从 v0.11.0 :
开始如果您尝试在csrf.js配置文件中为对象提供设置,则挂钩只会使用“default on”覆盖所有设置。 csrf对象最终看起来像这样
{
grantTokenViaAjax: true,
protectionEnabled: true,
origin: '-',
routesDisabled: '-'
}
为了向对象添加路由免除,您需要在设置完成后执行此操作,因此我在config / bootstrap.js中执行此操作。所以要添加路线“http://yourhost.com/webhooks/testhook/”:
// In bootstrap.js
sails.config.csrf.routesDisabled = "/webhooks/testhook";
如果要添加多个钩子,可以将它们添加到相同的字符串中,逗号分隔:
// In bootstrap.js
sails.config.csrf.routesDisabled = "/webhooks/testhook,/webhooks/anotherhook";
答案 1 :(得分:6)
所以Murcho的解决方案正在运行,但实际上,sails v0.11只有一个配置文件:
在config/csrf.js
中,在激活csrf保护的行之后是这个注释块:
/****************************************************************************
* *
* You may also specify more fine-grained settings for CSRF, including the *
* domains which are allowed to request the CSRF token via AJAX. These *
* settings override the general CORS settings in your config/cors.js file. *
* *
****************************************************************************/
// module.exports.csrf = {
// grantTokenViaAjax: true,
// origin: ''
// }
你只需要在那里添加一个配置对象来扩展默认值:
module.exports.csrf = {
"routesDisabled": "/webhooks/testhook,/webhooks/anotherhook"
}