如何防止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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • IMU校正以及姿态融合[通俗易懂]

    版权声明:本文为博主原创文章,未经博主允许不得转载。博主:shenshikexmu联系方式:shenshikexmu@163.com缘起有缘在简极科技兼职两年。接触了IMU,我去的时候那家公司还是一个要把IMU放进足球的公司,祝愿简极越来越好。IMU校正算法大概是接触传感器三个月做出来的,博客IMU加速度、磁力计校正--椭球拟合的内容,那时只是把校准问题当作椭球拟合问题。融合算法大…

    2022年4月18日
    60
  • SAE J1939 – 简短介绍[通俗易懂]

    SAE J1939 – 简短介绍[通俗易懂]SAEJ1939–简短介绍在商用车辆领域,标准化的,串行的协议用于单个电子控制单元(ECU)和传动系统组件之间的通讯已有一段时间。通过使用标准化的串行协议,可具有以下优势:组件制造商只需要采用一个协议;这主要是商用车辆才会涉及的问题,因为生产量低。商用车辆制造商可依靠不同供应商的组件。可确保组件之间的互操作性,来自不同制造商的组件不用调整就可一同工作。由国际汽车工程师协会…

    2022年5月1日
    52
  • 订单支付流程

    订单支付流程购物车订单处理流程根据上图订单页面进行分析如何安全下订单进入购物车页面,点选商品(书籍)时,将商品(书籍)productId通过API传给后端,然后返回书籍价格显示给用户,如图1.点击结算按钮,将勾选的商品(书籍)productId包装成数组,传入API给后端,该API是复合接口,包括礼券是否可以使用、详细介绍等。后端API返回订单详情,并有签名加密的订单token,本地存储并将订…

    2022年5月3日
    104
  • C++ Vector Resize函数[通俗易懂]

    C++VectorResize函数ChangesizeResizesthecontainersothatitcontainsnelements.Ifnissmallerthanthecurrentcontainersize,thecontentisreducedtoitsfirstnelements,removingthosebeyond(anddestroyingthem).Ifnisgreaterthanthecu

    2022年4月8日
    83
  • dw网页设计怎么加背景音乐_dw网页如何设置背景音乐mp3

    dw网页设计怎么加背景音乐_dw网页如何设置背景音乐mp3本文以mid格式文件和mp3格式文件为例,教你如何在网页中插入背景音乐。1、MID是用来插入背景音乐,但只适用于IE,其参数设定不多。如下:src=”your.mid”:设定midi档案及路径,可以是相对或绝对。autostart=true:是否在音乐档下载完之后就自动播放。true是,false否(内定值)。loop=infinite:是否自动反复播放。LOOP=2表示重复两次…

    2022年9月24日
    2
  • c语言字符串去重_putchar输出字符串

    c语言字符串去重_putchar输出字符串输入一串字符,然后去重。如:输入aaabbbbd;输出应为abd;#include<iostream>#include<string>usingnamespacestd;intmain(){intn;cin>>n;//n表示你要处理多少组stringa;//定义字符串for(inti=0;i<n;…

    2025年6月16日
    0

发表回复

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

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