jquery - 如何阻止其他网站发送跨域ajax请求?

标签 jquery asp.net security cors

我能够从 2 个不同的应用程序发送跨源请求。虽然浏览器返回了 Cross-Origin 错误,但我的服务器仍在接收并执行请求。例如,从远程站点,我可以使用调用跨域请求,

$.ajax({
        xhrFields: {
            withCredentials: true
        },
        data:{ my: 'a' },
        url: 'http://MyApp/Page',
        type: 'POST'
})

我知道浏览器不会将响应返回给脚本,但我的服务器页面仍然执行。

假设一个无辜的用户登录了一个网站,http://abc.com 。该应用程序将接受插入记录的发布请求。当无辜用户访问无辜时http://HackerSite.comhttp://HackerSite.com将能够发送 POST 请求到 http://abc.com通过 Ajax 。如何避免这种情况?

最佳答案

您所说的漏洞是CSRF但可以防范。

您可以通过发送和检查 X-Requested-With: XMLHttpRequest header 来防止 POST 在 AJAX 请求之外提交(例如通过 HTML 表单)。由于此 header 不在安全列表中(即没有 CORS),因此也无法通过 AJAX 跨域发送。

但是,过去有一些通过插件(例如 flash)进行的漏洞利用,其中可以设置通过浏览器无法实现的 header (例如 Referer),因此为了防止这种情况,建议使用synchroniser token pattern其中涉及在隐藏字段中设置一个 token ,该 token 以及所有破坏性请求的 cookie 都会被验证。我所说的破坏性是指更改、提交或删除内容的请求(即应该是 POST 的内容)。

有关更多信息,请参见此处:http://www.html5rocks.com/en/tutorials/cors/

关于jquery - 如何阻止其他网站发送跨域ajax请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19566366/

相关文章:

c# - Microsoft Graph API token 的范围与 Azure 门户中设置的范围不同

javascript - AngularJS 没有发生绑定(bind)

security - TLS 相对于 SSL3 的优势

mysql - 如何使用二维码保护 MySQL?

javascript - 访问全局变量

jquery - 更改类(class)中的角色

javascript - jQuery 对象作为元素

php - ajax-如果我在 url 上发送 ajax 请求,我可以检查 php 页面是否是请求或页面已打开吗?

asp.net - Orchard CMS 站点 url 在数据库中的位置?

java - 有没有办法在 Android 设备上安全地存储用户数据?