10.WebGoat之请求伪造

CSRF

CSRF全称跨站请求伪造,是利用用户对浏览器的信任(XSS利用用户对站点的信任),需要用户进行点击或者访问攻击站点,当用户点击攻击连接时自动完成未授权的修改数据请求,或当用户访问攻击站点(被用户信任的站点)时,浏览器自动发起针对用户正在访问(已访问)站点(被攻击站点)的命令/请求

防御

  1. 根据请求头referer,对请求来源进行检查

  2. 在服务器端生成随机token,浏览器在发起针对数据的修改请求将token提交,由服务器端验证通过够进行操作逻辑,token需要至多一次有效,并具有有限的生命周期

    a. 表单提交修改数据

     可将token生成在表单内使用input:hidden标签进行提交
    

    b. Ajax提交修改数据

     可将token生成在cookie内(cookie不能设置为httponly),ajax请求前通过js读取cookie中的token并添加到request body或者http requestheader中进行提交
    
  3. 针对需要用户授权的请求,提示用户输入身份认证后再继续操作

  4. 针对频繁操作提示输入验证码后再继续进行操作

解题

  1. Cross-Site Request Forgeries 03

    10.01.png
    10.02.png
    10.03.png
    10.04.png
    10.05.png
    10.06.png
    10.07.png
  2. Cross-Site Request Forgeries 04

    10.08.png
    10.09.png
    10.10.png
    10.11.png
    10.12.png
  3. Cross-Site Request Forgeries 07

    10.13.png
    10.14.png
    10.15.png
    10.16.png
    10.17.png
  4. Cross-Site Request Forgeries 08

    10.18.png
    10.19.png
    10.20.png
    10.21.png

    这里很奇怪有个很奇怪的问题,调试了下webgoat代码发现在重复进行登陆是SecurityContextHolder.getContext().getAuthentication().getPrincipal()返回的用户信息依然为先前登陆的用户信息,抓包分析登陆前后请求sessionid已经变化,这里需要再对spring security进行研究,才能得到结论。

    解决方法:进行一次退出登录,并使用延迟200毫秒后自动提交表单(延迟时间不宜过长,因为webgoat有自动退出功能,如果退出登录,第一个窗口会自动退出到登陆页面)

    10.22.png
    10.23.png
    10.24.png
    10.25.png
    10.26.png

欢迎添加公众号【扯淡er】学习交流

扯淡er
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容