zoukankan      html  css  js  c++  java
  • web的脚本安全-CSRF

    CSRF,即Cross-site request forgery,中文一般叫跨站请求伪造。

    攻击原理是,用户在A网站(登录,之后打开一个B网站,B网站的脚本(或HTML标签)向A网站发送一个请求,这个请求会自动携带用户的COOKIE,如果这时A网站验证成功,则完成了攻击。

    那么,具体的攻击过程是什么?

    1)用户登录A网站。

    A网站提供一个修改用户名的api,例如http://A.com/modName?newname=test1。这个api会验证cookie,验证通过之后则修改用户名。

    2)之后用户登录B网站,B网站的里有一段代码如下(可以成功把用户在A网站的名字修改为test2,因为发往A.com的请求都会自动带上A.com的cookie):

    <img src="http://A.com/modName?newname=test1" />

    很简单吧,但这就完成了一次跨站请求伪造的攻击。我们可以看出攻击要点在:

    1)A网站的服务器对cookie的简单直接验证。

    2)用户登录网站A之后能引导TA打开B网站。

    攻击简单,解决方案也很简单:

    1,保证A网站的所有api接口都不只是通过验证cookie就完成用户确认。

    2,前端与后端配合,使用同一个算法,在发送请求前,居于cookie再产生一个编码(也可以叫token)发送到服务器端,服务器端对这个token进行验证。

    为什么能解决问题?因为网站B虽然能伪造请求(即修改参数),但网站B获取不了A网站的cookie,这样网站B就伪造不出这个token,A网站获取不到这个token则无法完成用户确认。

    PS:当然,服务器端还可以通过检测refer这个属性来防范CSRF,但这个可能会把部分用户正常请求当成非法请求,例如https转到http。

  • 相关阅读:
    解压版(绿色版)Tomcat配置
    安装、设置与启动MySql绿色版的方法
    JDBC连接MySQL出现的问题
    可变长数组在GCC编译器中的实现
    关于取余
    java中类和接口的一点整理
    orgmode 写cnblogs 博文(一些问题的解决)
    This file is about changes in Emacs version 24.
    autocomplete插件使用中遇到的问题及原因
    junit&jmockit工具熟悉记录
  • 原文地址:https://www.cnblogs.com/kevinboy/p/3803025.html
Copyright © 2011-2022 走看看