将站点的身份验证Cookie的摘要用于CSRF - javascript

我想保护我的WebApi端点免受CSRF的侵害。 Angular小组建议将您站点的身份验证Cookie的摘要与盐一起使用,以提高安全性。我不确定与随机令牌相比有什么优势。此外,您如何保护登录页面?

这是为什么您需要保护登录页面https://security.stackexchange.com/questions/2120/when-the-use-of-a-antiforgerytoken-is-not-required-needed的说明

参考方案

您描述的方法是detailed here:

  跨站点请求伪造(XSRF)保护XSRF是一种通过
  未经授权的站点可以获取您用户的私人数据。角度的
  提供了一种抵抗XSRF的机制。在执行XHR请求时,
  $ http服务从cookie中读取令牌(默认情况下为XSRF-TOKEN)
  并将其设置为HTTP标头(X-XSRF-TOKEN)。由于只有JavaScript
  在您的域上运行的可以读取Cookie,您的服务器可以
  确保XHR来自您域中运行的JavaScript。的
  标头不会为跨域请求设置。
  
  要利用此优势,您的服务器需要在
  第一个HTTP上称为XSRF-TOKEN的JavaScript可读会话cookie
  GET请求。在随后的XHR请求中,服务器可以验证
  Cookie与X-XSRF-TOKEN HTTP标头匹配,因此请确保
  只有您域中运行的JavaScript才能发送请求。
  令牌对于每个用户必须是唯一的,并且必须由
  服务器(以防止JavaScript编写自己的令牌)。我们
  建议令牌是您网站身份验证的摘要
  饼干加盐可增强安全性。
  
  标头名称可以使用xsrfHeaderName和
  $ httpProvider.defaults的xsrfCookieName属性位于
  配置时,运行时$ http.defaults或按请求配置
  宾语。
  
  为了防止在多角度环境中发生碰撞
  应用共享相同的域或子域,我们建议每个
  应用程序使用唯一的cookie名称。

这似乎是Encrypted Token Pattern CSRF prevention method的变体,使用散列而不是加密,并且盐的作用类似于密钥。

它还依赖于HTTP功能,该功能阻止自定义标头跨域发送,就像添加X-Requested-With一样。

声明“未经授权的站点可以获取用户的私人数据”的部分具有误导性,因为CSRF不允许直接这样做-CSRF攻击允许未经授权的站点在当前登录用户的上下文中提交您的站点的表单。

这种方法的一个优点是您不需要在服务器端额外保存任何东西。例如,如果您使用的是token-based身份验证,则可以通过对服务器端盐应用相同的哈希值,轻松地验证收到的CSRF令牌与cookie匹配。即使您使用基于cookie的身份验证,也不需要对照存储在服务器端的单独值来验证CSRF令牌-您只需对cookie值进行哈希处理,以验证其是否与传递的令牌匹配。

有关如何防止登录CSRF的信息,请参见this answer。

Json参数转换继承Web API 2 - javascript

我正在使用MS Web API 2使用ajax从我们的网页接收呼叫。然后,我有2个类:Subscriber和externalSubscriber。订户包含非常基本的数据,例如名称和ID。外部订户继承自订户并添加基本数据,例如地址和电子邮件。我有一个api方法来编辑这样定义的订户的数据:public IHttpActionResult PutSubscribe…

重复使用Google Api Bearer令牌来访问用户的云端硬盘 - javascript

我有以下几点: gapi.auth.authorize( { client_id: CLIENT_ID, scope: SCOPES, immediate: false }, handleAuthResult); 这使我可以访问access_token:目标是使该应用程序的用户可以授予对我的应用程序的访问权限,以使用其Google驱动器存储其内容。我需要能够…

javascript popupwindow之后的行如何工作? - javascript

好的,我有一个来自后面代码的方法,可以创建一个popupwindow。然后有一行代码要在那之后执行,我想知道那行代码何时执行,是在使用popupwindow之后执行还是在创建popupwindow之后执行?例如:void exPopupWindowMethod() { string scr = "window.open('exampleP…

Selenium Web Driver访问Jquery中的Javascript全局变量 - javascript

我正在尝试使用Selenium在Python中运行功能测试,我想在某个页面上声明的Javascript中检索全局变量的值。通常,browser.execute_script("return globalVar;")可以正常工作,但是在$(document).ready(function(){中声明了该变量,Selenium无法找到它。因此…

Javascript-Urls的奇怪字符串比较行为 - javascript

最近,在编写我无法理解的javascript时遇到了字符串比较的问题。我从完全相同的网址创建了两个字符串,当我比较它们时返回false,但是在重新分配相同的字符串后,比较返回true。这是我的示例:var str1 = "http://google.com/"; var str2 = "http://google.com‏/&#…