如何防止XSRF攻击

如何防止XSRF攻击XSRF全称是cross-siterequestforgery(跨站点请求伪造),也称为CSRF,是一种常见的web攻击方式。攻击形式描述如下:1.用户登录并访问一个正常的站点http://www.biz.com;2.在同一个浏览器实例下,用户打开了恶意网站http://www.bad.com;(至于用户怎么会打开这个恶意网站,可能是恶意网站通过一些链接或者垃圾邮件等等形式诱…

大家好,又见面了,我是你们的朋友全栈君。

XSRF全称是 cross-site request forgery(跨站点请求伪造),也称为CSRF,是一种常见的web攻击方式。

攻击形式描述如下:

1.用户登录并访问一个正常的站点 http://www.biz.com;

2.在同一个浏览器实例下,用户打开了恶意网站 http://www.bad.com;(至于用户怎么会打开这个恶意网站,可能是恶意网站通过一些链接或者垃圾邮件等等形式诱骗用户点了某一个链接)

3.恶意网站页面里包含下面一段代码:

<form method=”POST” name=”evilform” target=”hiddenframe”

action=”https://www.biz.com/update_profile”>

<input type=”hidden” name=”password” value=”heihei”>

</form>

<iframe name=”hiddenframe” style=”display: none”>

</iframe>

<script>

document.evilform.submit();

</script>

你明白下面会发生什么了:用户在不知觉的情况下,被修改了密码。

如何防御XSRF攻击,方法比较多,比如在上面的例子中,要修改密码,必须提供旧密码,那么就可以有效的避免攻击。但是,XSRF是一个普遍存在的问题,不能所有场景下都需要用户输入一串东西,用户肯定会崩溃。

比较靠谱和通用的解决方案如下:

在进行一些改变系统数据的重要操作中(比如提交订单,修改密码,删除..等操作),加入一个供校验的action token。这个action token是由应用先前生成的(如绘制表单时),作为表单的一个hidden字段。

这个action token的生成必须要有些讲究,不能让骇客随意冒充过关,一个靠谱的生成算法如下:

action token = F(K,C),其中K是一个只有应用服务器才知道的密钥,C是本次会话的标识,如jsessionid。

应用在接受到请求时,首先校验action token是否合法,校验的方式是取出jsessionid,然后使用F(K,C)计算action token,如果计算的结果和表单提交过来的action token值一样,则放行。

这种方案可以有效的防御XSRF攻击,因为恶意网站无法知道K和C的值,无法伪造action token。

但是如果你的站点遭遇了XSS攻击,那么一切都白搭,因为骇客可以轻易的获取session cookie,冒充用户身份直接攻击即可。

来自: http://blog.csdn.net/newjueqi/article/details/7542409

转载于:https://www.cnblogs.com/time-is-life/p/6594931.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/144632.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长

相关推荐

  • 如何使用IntelliJ IDEA 配置Maven

    如何使用IntelliJ IDEA 配置MavenIDEA全称IntelliJIDEA,是java语言开发的集成环境,IntelliJ在业界被公认为最好的Java开发工具之一,IDEA是JetBrains公司的产品,现在有逐步取代老牌Java开发工具Eclipse的趋势.那本人也是从Eclipse转到IDEA.那刚转换过来时,确实很不适应,不过好在坚持使用了几天后,确实感觉IntelliJIDEA比Eclipse更加智能.  

    2022年9月27日
  • settings官方网站_phpstorm中文

    settings官方网站_phpstorm中文setting —> php,选择php版本,并点击…,选择到php.exe进入到appserv底下找到php.ini文件,查找date.timezone,去掉前面的;号,添加”Asia/Shanghai”重启appserv环境,就是重启下apache 和 mysql服务发现依然失败后面重启电脑就可以了哈哈哈哈哈哈哈哈…

    2022年8月18日
  • stm32开发教程_单片机STM32

    stm32开发教程_单片机STM32本博客的编写目的:一、自我总结,记录。二、分享,输出,加深思考。三、不作细致如书本般编排,尽管那样的排版很好看,但是过于耗费时间,还有很多东西没有必要说明,完全可以自己去解决,但还是尽量做好排版,便于阅读。四、尽可能举一反三,做到真正能够处理实际问题。STM32开发实战(1)目录一、概述,目的二、搭建步骤三、时钟部分案例分析四、理论总结一、

    2022年9月7日
  • 递归之原理及汉罗塔的递归与非递归实现[通俗易懂]

    递归之原理及汉罗塔的递归与非递归实现[通俗易懂]递归章节一.什么是递归递归:简单的讲,就是定义一个过程或函数时出现调用本过程或本函数就称为递归。典型的例子:求阶乘:intfun(intn){ if(n==1) return(1);elsereturnfun(n*fun(n-1));}二.那么使用递归需要满足那些条件呢?(1) 从上例就可以看出,递归需要终止递归的结束条件。(2)…

    2022年10月11日
  • mysql redis配置文件详解_Redis配置文件redis.conf 详解

    mysql redis配置文件详解_Redis配置文件redis.conf 详解Redis配置文件redis.conf详解1.基本配置内存单位的表示#1k=>1000bytes#1kb=>1024bytes#1m=>1000000bytes#1mb=>1024*1024bytes#1g=>1000000000bytes#1gb=>1024*1024*1024bytes单位中不区分大小写1GB…

    2022年6月9日
  • Ansi,UTF8,Unicode,ASCII编码的差别

    Ansi,UTF8,Unicode,ASCII编码的差别

    2021年12月7日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号