Javascript 在Aurelia中防范CSRF攻击
在Aurelia中,似乎还不支持CSRF保护,而AngularJS的Javascript 在Aurelia中防范CSRF攻击,javascript,security,csrf,csrf-protection,aurelia,Javascript,Security,Csrf,Csrf Protection,Aurelia,在Aurelia中,似乎还不支持CSRF保护,而AngularJS的XSRF-TOKEN头是由AngularJS框架在所有XHR请求上自动设置的 我应该如何保护Aurelia应用程序免受CSRF攻击?我是否应该基于提供自己的支持,或者Aurelia是否已经有了其他选择?通过使用Aurelia,您应该能够非常轻松地做到这一点(请参阅)。在每次请求之前,您可以发送您的令牌。这可以通过传统的aureliahttp客户端和新标准的aureliafetch客户端来实现 您的代码可能如下所示: export
XSRF-TOKEN
头是由AngularJS框架在所有XHR请求上自动设置的
我应该如何保护Aurelia应用程序免受CSRF攻击?我是否应该基于提供自己的支持,或者Aurelia是否已经有了其他选择?通过使用Aurelia,您应该能够非常轻松地做到这一点(请参阅)。在每次请求之前,您可以发送您的令牌。这可以通过传统的
aureliahttp客户端
和新标准的aureliafetch客户端
来实现
您的代码可能如下所示:
export class MyRestAPI {
static inject () { return [HttpClient]; } // This could easily be fetch-client
constructor (http) {
this.http = http.configure(x => {
x.withBaseUrl(myBaseUrl);
x.useStandardConfiguration();
x.withInterceptor({
request: function (request) {
request.headers.set('XSRF-TOKEN', myAwesomeToken);
return request;
}
});
});
}
...
}
每次请求时,都会发送您的令牌。您必须在服务器端处理验证。您可以轻松地设置代码,以便初始请求可以获取令牌,或者您可以将令牌作为身份验证负载的一部分传递回,或者如果您愿意,您甚至可以将令牌存储在浏览器的本地存储中并以这种方式使用
您甚至可以更进一步,实现JWT身份验证。如果您使用的是node.js,我有一个小示例,描述了我如何在Express中实现JWT。Github上有一个插件,名为处理JWT,还有一个。这里是一个示例拦截器,它从响应头读取令牌(如果存在),并在每个需要它的请求上自动设置它
从“aurelia http客户端”导入{Interceptor,HttpResponseMessage,RequestMessage};
类CsrfHeaderInterceptor实现拦截器{
私有静态只读令牌_头='X-CSRF-TOKEN';
私有latestCsrfToken:string;
响应(响应:HttpResponseMessage):HttpResponseMessage{
if(response.headers.has(CsrfHeaderInterceptor.TOKEN_HEADER)){
this.latestCsrfToken=response.headers.get(CsrfHeaderInterceptor.TOKEN\u HEADER);
}
返回响应;
}
请求(请求:请求消息):请求消息{
if(此.latestCsrfToken){
if(['POST','PUT','PATCH'].indexOf(request.method)>=0){
request.headers.add(CsrfHeaderInterceptor.TOKEN_头,this.latestCsrfToken);
}
}
返回请求;
}
}
您可以在http/fetch客户端中注册它,例如:
httpClient.configure((config) => {
config
.withBaseUrl("/api/") // adjust to your needs
.withHeader('Accept', 'application/json') // adjust to your needs
.withHeader('X-Requested-With', 'XMLHttpRequest') // adjust to your needs
.withInterceptor(new CsrfHeaderInterceptor());
});
使用modsecurity。它是apache或nginx的模块,或者可以充当反向代理。它具有内置的抗CSRF功能。或者使用cloudflare之类的工具