如何防止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

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • Python中通过PyPDF2实现PDF合并

    Python中通过PyPDF2实现PDF合并场景PyPDF2是一个纯pythonPDF库,能够分割、合并、裁剪和转换PDF文件的页面。它还可以向PDF文件中添加自定义数据、查看选项和密码。它可以从PDF检索文本和元数据,还可以将整个文件合并在一起。PyPDF21.26.0文档:https://pythonhosted.org/PyPDF2/实现新建PDF1新建PDF2使用pip安装pypddf2…

  • 计算机二级考试python怎么考_计算机二级python难度

    计算机二级考试python怎么考_计算机二级python难度2020.09.26更新:今天的二级python最后一个大题考试内容(部分),没考试的同学大家还可以最后挣扎一下。==========================================最新消息:2020年9月(第58次)全国计算机等级考试定于9月26日至29日举行。大家加油鸭!2020.8.15更新:==========2020.1.8更新:有同学问我的公共基础那10分是怎么拿到的,…

  • 线程和进程有什么区别(简单介绍)[通俗易懂]

    线程和进程有什么区别(简单介绍)[通俗易懂] 线程和进程有什么区别(简单介绍) 简单介绍一、线程的基本概念  线程是进程中执行运算的最小单位,是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点在运行中必不可少的资源,但它可与同属一个进程的其它线程共享进程所拥有的全部资源。一个线程可以创建和撤消另一个线程,同一进程中的多个线程之间可以并发执行。   …

  • docker网络的配置

    docker网络的配置docker网络的配置Linux内核实现名称空间的创建ipnetns命令可以借助ipnetns命令来完成对NetworkNamespace的各种操作。ipnetns命令来自于iproute安装包,一般系统会默认安装,如果没有的话,请自行安装。注意:ipnetns命令修改网络配置时需要sudo权限。可以通过ipnetns命令完成对NetworkNamespace的相关操作,可以通过ipnetnshelp查看命令帮助信息:[root@localhost~]#ipne

  • linux常用命令菜鸟教程_初学者化妆必备用品清单

    linux常用命令菜鸟教程_初学者化妆必备用品清单一.学习Linux终端命令的原因1.Linux刚面世时并没有图形界面,所有的操作全靠命令完成,如磁盘操作、文件存取、目录操作、进程管理、文件权限设定等2.在职场中,大量的服务器维护工作都是在远程通过SSH客户端来完成的,并没有图形界面,所有的维护工作都需要通过命令来完成在职场中,作为后端程序员,必须要或多或少的掌握一些Linux常用的终端命令。3.Linux发行版本的命令大概有200多个,但是常用的命令只有10多个而已二.linux常用指令ls命令…

  • js鼠标事件 clientX、clientY、offsetX、offsetY、layerX、layerY、pageX、 pageY、screenX、screenY「建议收藏」

    js鼠标事件 clientX、clientY、offsetX、offsetY、layerX、layerY、pageX、 pageY、screenX、screenY「建议收藏」MouseEvent的类别有以下:mousedown鼠标按下mouseup鼠标释放click左键单击dblclick左键双击mousemove鼠标移动mouseover鼠标经过mouseout鼠标滑出mouseenter鼠标进入mouseleave鼠标离开contextmenu右键菜单注意:执行顺序:mousedown—&g…

    2022年10月25日

发表回复

您的电子邮箱地址不会被公开。

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