我是一个新手,正在尝试深入了解同源策略。虽然stackoverflow和其他地方有非常好的关于SOP概念的文章,但我找不到有关chrome和其他浏览器是否允许跨域XHR post请求在第一时间“发送”的更新信息。
从this五年前的帖子中,似乎chrome允许请求通过到请求的服务器,但不允许请求者读取响应。
我在我的网站上进行了测试,试图从不同的域更改我的服务器上的用户信息。详细信息如下:
我考虑过预检请求,在此发送请求以检查是否允许在服务器上进行更改用户信息的实际数据之前阻止请求。然而,根据Access_Control_CORS,这些预检请求仅在特定情况下发送,这些情况不适用于我的简单AJAX post请求(其中包括一个默认为
那么是Chrome已经更改了其安全规范以防止从一开始就向跨域发送post请求呢? 还是我在同源策略方面有所误解?
无论哪种方式,了解不同Web浏览器中实施的更新安全措施的来源将非常有帮助。
从this五年前的帖子中,似乎chrome允许请求通过到请求的服务器,但不允许请求者读取响应。
我在我的网站上进行了测试,试图从不同的域更改我的服务器上的用户信息。详细信息如下:
- 我的域名:"www.mysite.com"
- 攻击者的域名:"www.attacker.mysite.com"。根据同源策略,这两个被认为是不同的源。
用户(在登录到www.mysite.com时)打开www.attacker.mysite.com并按下一个按钮,该按钮向“www.mysite.com”服务器发送POST请求...提交的隐藏表单(在此情况下没有令牌)具有更改用户信息所需的所有信息,位于'www.mysite.com'服务器上-->结果:CSRF成功攻击:用户信息确实发生了更改。
现在使用javascript通过JQuery
.post
提交表单而不是提交表单-->结果:除了chrome给出正常响应之外:
请求的资源中不存在“Access-Control-Allow-Origin”头
我发现在服务器端没有做任何更改...似乎请求甚至都没有从浏览器传递。用户信息根本没有更改!虽然听起来很好,但我期望相反的结果。
根据我的理解和上面链接的帖子,对于跨域请求,浏览器只应该阻止服务器响应而不是从一开始就发送post请求到服务器。此外,我没有设置任何CORS配置;没有发送Access-Control-Allow-Origin headers
。但即使我已经设置了,这也仅适用于“读取”服务器响应,而不是实际发送请求...对吗?我考虑过预检请求,在此发送请求以检查是否允许在服务器上进行更改用户信息的实际数据之前阻止请求。然而,根据Access_Control_CORS,这些预检请求仅在特定情况下发送,这些情况不适用于我的简单AJAX post请求(其中包括一个默认为
application/x-www-form-urlencoded
的简单表单,并且未发送自定义标头)。那么是Chrome已经更改了其安全规范以防止从一开始就向跨域发送post请求呢? 还是我在同源策略方面有所误解?
无论哪种方式,了解不同Web浏览器中实施的更新安全措施的来源将非常有帮助。