当前位置: 首页 > 知识库问答 >
问题:

Access-Control-Allow-Origin是否足以防止XSRF攻击?

尹正奇
2023-03-14

我们正在用运行在JBoss中的Java Spring/Hibernate后端构建一个应用程序。前端是AngularJS。

我们还没有在服务器端设置XSRF令牌。我们也没有(无论如何还没有)允许其他域访问我们的web资源的要求。

我想我会试着看看我们的站点是否容易受到XSRF攻击,所以我设置了一个恶意的webapp,使用Angular的$http.post()发布到我们真正应用程序的URL中。我登录到真正的应用程序,然后我试着从恶意应用程序发帖。

在浏览器中,我得到了一个401响应,并看到了错误:

XMLHttpRequest cannot load http://localhost:8080/user/delete. No
'Access-Control-Allow-Origin' header is present on the requested resource.
Origin 'http://localhost:6543' is therefore not allowed access. The response
had HTTP status code 401.

服务器端没有设置为在响应上设置Access-Control-Allow-Origin,因此出现上述错误。

所以我的问题是,仅仅从响应头中省略Access-Control-Allow-Origin就足以防止XSRF攻击了吗?

是否有一种方法,即使没有设置Access-Control-Allow-Origin,我仍然可以对我的站点进行XSRF攻击?如果是,怎么做?我想演示一下这个攻击。

谢了。

共有1个答案

阳宗清
2023-03-14

不,这还不够。即使浏览器给出'Access-Control-Allow-Origin'错误,该请求仍然是由浏览器发出的。如果攻击页指定了with Credentials:

$http.post(url, {withCredentials: true, ...})

然后,此请求将与受害者的身份验证cookie一起发送到您的域,这意味着对http://www.example.com:8080/user/delete的请求将成功。

此外,也可以使用标准HTML表单在没有XHR的情况下发出此请求:

<form method="post" action="http://www.example.com:8080/user/delete">

保护系统免受CSRF攻击的一种简单方法是检查自定义头,如x-requested-withorigin头。x-requested-with不能在不启用CORS服务器端的情况下跨域发送。但是,Synchronizer令牌模式仍然是防止CSRF的最强方法,因为它不会受到浏览器插件中的缺陷的影响,例如Flash中以前允许发送通常无法从浏览器发送的头的缺陷。

 类似资料:
  • Access-Control-Allow-Origin响应 header 指示是否该响应可以与具有给定资源共享原点。 Header type Response header Forbidden header name no 语法 Access-Control-Allow-Origin: *Access-Control-Allow-Origin: <origin> 指令 * 对于没有凭据的请求,服务

  • null 服务器的响应如下: XMLHttpRequest无法加载http://nqatalog.negroesquisso.pt/login.php。Access-Control-Allow-Origin不允许Origin 。 如何解决此问题?

  • 问题内容: 这可能是一个简单的(一系列)问题,但我无法解决。 我正在尝试从托管在我网站上的Web应用程序访问github api。简而言之,这是代码: 如果我将浏览器指向在我的保管箱帐户上载的这个简单页面,则一切正常。相反,如果我将浏览器指向该网站上上传的这个简单页面,则会得到臭名昭著的异常: 因此,问题是: 为什么在Dropbox上可以使用? 我了解使用CORS即使在网站上也可以使用。这是我的A

  • XMLHttpRequest无法加载http://localhost:8080/nobelgrid/api/users/create/。请求的资源上没有“访问-控制-允许-来源”标头。因此,不允许访问源'http://localhost:63342'。响应的HTTP状态代码为500。 谁能帮帮我吗? 更新: 但我还有一个错误。我会做另一个问题,因为我认为这是一个不同的论点。 提前感谢!

  • 问题内容: 我是Ajax的新手,只是受过此跨域调用的任务。我们的网页上有一个文本框,用户可用来执行公司名称搜索。通过单击文本框旁边的按钮,将请求Ajax调用。不幸的是,Web服务位于单独的域中,因此自然会引起问题。 以下是我使这项工作的最佳尝试。我还要注意,此调用的目的是以XML格式返回结果,该结果将在请求的一部分中进行解析。 这又是错误消息: 对于解决方法,我不知所措,将不胜感激任何想法。 问题

  • 问题内容: 我正在对他们设置的平台上的我自己的服务器执行ajax调用,以防止这些ajax调用(但是我需要它从服务器上获取数据以显示从服务器数据库中检索到的数据)。我的ajax脚本正在运行,它可以将数据发送到服务器的php脚本以进行处理。但是由于它被 我无权访问该平台的源/核心。因此我无法删除不允许这样做的脚本。(P / SI使用了Google Chrome浏览器的控制台,并发现了此错误) Ajax