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

解释了CSRF、令牌和同源策略

齐成双
2023-03-14

所以我知道有很多关于CSRF的问题(因为我读过其中一些),但有一点我仍然不明白。让我们设想以下情况:

>

  • 我(使用cookies)登录到我的服务器,其中有一个带有“删除我的帐户”按钮的页面。我不想逼你。

    我访问黑客的服务器:

    A.我的浏览器请求bad.html,其中包含JS,并定义了回调函数。它还有一个脚本,比如:(从而避免了同源政策问题)

    var s = document.createElement('script'); 
        s.src = 'url to "deleteAccountPage" of my server?'
        s.src += 'callback=hackerCallback'; 
        s.type = 'text/javascript';
    document.body.appendChild(s);
    

    B.脚本"附加"浏览器将加载页面,然后调用hackerCallback传递页面超文本标记语言作为参数。

    c、 使用此HTML,回调可以解析其中的令牌。

    hackerCallback现在拥有令牌,在“deleteMyAccount”页面上向我的服务器发送一个Ajax请求。

    我的帐户现在被删除了,因为令牌、cookie甚至浏览器跟踪都与服务器注册的匹配。

    你如何避免这种行为?我读过关于只允许在我的服务器上的某些标题的事情。这将缩短我服务器上的所有跨域请求,但是根据这个链接(http://blog.alexmaccaw.com/jswebapps-csrf)它是不够的...(我完全相信)

    Thansk的帮助Seba-1511

  • 共有1个答案

    狄英哲
    2023-03-14

    您使用JSONP是为了通过scr标记发出跨域请求。JSONP只允许用于GET请求,不应该有进行更改的GETendpoint(非幂等)。

    删除帐户应该是不能通过JSONP请求的POST终结点。

    如果您坚持在delete帐户上使用GET,您应该使用CSRF令牌或将令牌发送到标头中而不是cookie中(如果您使用XHR请求)

     类似资料:
    • 问题内容: 我正在尝试从CSRF保护应用程序(PHP和许多JS)。 我想使用令牌。 AJAX完成了许多操作,因此我必须在Javascript中传递令牌。如果我想为每个会话或每个页面加载生成1个令牌,这很简单- 我生成一个新令牌,将其放在DOM中的某个位置,然后使用Javascript查找并发送到处理端。 但是,如果我想为每个操作使用新令牌怎么办?我正在考虑进行ajax调用以重新生成令牌,然后将结果

    • 问题内容: 我有2个html页面。 父页面和子页面。子页面包含一个提交按钮,该按钮在父页面上运行代码以提交Ajax消息。 我使用$ .load()方法加载子页面,然后在单击按钮时运行$ .ajax .POST方法。此post方法仅将JSON字符串传递给Python代码。 当我在除IE以外的任何浏览器上执行此操作时,它工作正常。但是,当我在IE中运行此代码时。我收到有关CSRF令牌的Python /

    • 我们如何才能让他们识别lexer规则?所有、和规则都可能与匹配。那么我在测试它的时候应该使用什么类型。 我的意思是: 一般来说,我想了解如何知道的类型?

    • 示例: 爱丽丝通过浏览器登录到“https://example.com”(使用cookie)。我想,她使用的是现代浏览器。 爱丽丝访问“https://evil.com”,而evil.com的客户端代码对“https://example.com”执行某种请求(经典CSRF场景)。 所以: null null

    • 本页描述了解释CSRF攻击的用例(16.1): https://docs.spring.io/spring-security/site/docs/current/reference/html/csrf.html 但是,如果用户确实登录了银行的网站,那么邪恶的网站难道不可能发出GET请求以获取新的CSRF令牌,并在根本不需要用户的情况下撰写帖子吗? 答案必须是否定的,否则CSRF令牌将毫无用处,但我

    • 问题内容: 我有使用mod_wsgi在apache服务器上运行的django,以及由apache(而不是django)直接提供服务的angularjs应用。我想对django服务器进行POST调用(运行rest_framework),但csrf令牌存在问题。 是否可以通过某种方式从服务器设置令牌而不将其作为模板的一部分放置(因为这些页面没有经过django)? 我希望能够通过GET请求以cooki