Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在Aurelia中防范CSRF攻击_Javascript_Security_Csrf_Csrf Protection_Aurelia - Fatal编程技术网

Javascript 在Aurelia中防范CSRF攻击

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

在Aurelia中,似乎还不支持CSRF保护,而AngularJS的
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之类的工具