先做个名词解释:

XSS:跨站脚本(Cross-site scripting)

CSRF:跨站请求伪造(Cross-site request forgery)

看了估计也不清楚什么意思吧?

那么,详细解释下:

XSS: 其实就是Html的注入问题,攻击者的输入没有经过严格的控制进入了数据库,最终显示给来访的用户,导致可以在来访用户的浏览器里以浏览用户的身份执行Html代码。

一个例子:某文章的评论区,某个攻击者输入一段js代码作为评论:windows.alert("我是攻击者"); , 这段评论提交之后,服务端没有经过严格校验,就直接入库,下次有用户浏览这个文章时,这段评论会加载并作为html、js被浏览器解释执行,然后,用户就看到了“我是攻击者”的弹窗了。

以上是一个无恶意的攻击例子,如果攻击者有恶意的话。。。获取你的cookie,使用cookie登录你的账户,转账。。

CSRF:主要利用用户浏览器的cookie来进行的攻击行为。

假设有恶意网站X,页面上有这么一段代码:

<img src=http://www.mybank.com/Transfer.php?toBankId=11&money=1000>

这段代码会尝试从mybank中,往我的账户转账1000元。这个行为大部分情况会失败,因为这个转账接口是需要登录后的授权信息的。但是,

如果用户先登录了mybank, 然后不小心(比如在qq收到连接并点击了)打开恶意网站X,那么,这个攻击就生效了。登录mybank后,会产生mybank的授权cookie, 网站X请求mybank时,浏览器会带上授权cookie,导致被攻击。

如何防御

xss相对比较好防御,只要对输入进行过滤即可,现在很多webframework都提供了输入校验和xss过滤工具

csrf就不是那么好防御了。它是请求伪造,服务端要识别出这个是伪造的请求是有难度的,这个大概有几个防范思路

1、提高伪造的难度,比如不要随便通过HTTP GET来提交、操作数据,GET太容易被攻击了。GET方式的url可以轻易被各种途径传播。

2、服务端增加请求令牌, 这个令牌不写入cookie,每次返回给用户的页面带有这个随机生成的令牌,用户提交数据时,这个令牌作为隐藏域也一同提交,只有验证令牌一致,才可提交成功。嗯,增加了破解难度,但也不是无法破解,可以通过获取htm代码的方式获取令牌。

3、使用验证码, 这个方式比较安全了, 复杂的验证码不是那么容易破解的,有时候连人自己都认不出来。所以同样的,这种方式也给了用户非常不好的使用体验,慎重使用。

4、增加referer来源页判断,可以防一些小白(其实很多攻击者都是小白,从这点上看,还是很有效的)。

XSS 与 CSRF 跨站攻击的更多相关文章

  1. XSS/CSRF跨站攻击和防护方案

    Xss(Cross Site Scripting 跨站脚本攻击)/CSRF(Cross-site request forgery 跨站请求伪造),它与著名的SQL注入攻击类似,都是利用了Web页面的编 ...

  2. SpringSecurity框架下实现CSRF跨站攻击防御

    一.什么是CSRF 很多朋友在学习Spring Security的时候,会将CORS(跨站资源共享)和CSRF(跨站请求伪造)弄混,以为二者是一回事.其实不是,先解释一下: CORS(跨站资源共享)是 ...

  3. web前端安全 XSS跨站脚本 CSRF跨站请求伪造 SQL注入

    web安全,从前端做起,总结下web前端安全的几种技术: 1,XSS XSS的全称是Cross Site Scripting,意思是跨站脚本,XSS的原理也就是往HTML中注入脚本,HTML指定了脚本 ...

  4. Nancy启用跨站攻击防护(CSRF)

    什么是CSRF(跨站攻击) 可能很多人已经对CSRF有所了解,就简单的介绍下: CSRF全程是 Cross-Site Request Forgery .大概意思就是在登录用户不知情的情况下,由一个网站 ...

  5. XSS与CSRF两种跨站攻击比较

    XSS:跨站脚本(Cross-site scripting) CSRF:跨站请求伪造(Cross-site request forgery) 在那个年代,大家一般用拼接字符串的方式来构造动态SQL 语 ...

  6. 总结 XSS 与 CSRF 两种跨站攻击

    前言 在那个年代,大家一般用拼接字符串的方式来构造动态 SQL 语句创建应用,于是 SQL 注入成了很流行的攻击方式.在这个年代, 参数化查询 [1] 已经成了普遍用法,我们已经离 SQL 注入很远了 ...

  7. 总结XSS与CSRF两种跨站攻击

    XSS:跨站脚本(Cross-site scripting),实际应是"CSS",但由于和层叠样式表CSS名称冲突,故改为"XSS" CSRF:跨站请求伪造(C ...

  8. XSS 与 CSRF 两种跨站攻击

    在前几年,大家一般用拼接字符串的方式来构造动态 SQL 语句创建应用,于是 SQL 注入成了很流行的攻击方式, 但是现在参数化查询 已经成了普遍用法,我们已经离 SQL 注入很远了.但是历史同样悠久的 ...

  9. XSS与CSRF两种跨站攻击总结

    在那个年代,大家一般用拼接字符串的方式来构造动态 SQL 语句创建应用,于是 SQL 注入成了很流行的攻击方式.在这个年代, 参数化查询 [1] 已经成了普遍用法,我们已经离 SQL 注入很远了.但是 ...

随机推荐

  1. centos7.5环境下编译安装php7.0.30并安装redis和mongo扩展

    .安装php7..30的脚本 # vim install_php.sh #!/bin/bash # 安装基本依赖 yum install -y gcc gcc-c++ htop telnet ioto ...

  2. ARKit1.5 采坑

    1.对应的生成的预制体,0.1的大小按照Cube的实际大小进行缩放. Plane和Cube都是0.1的情况下是不一样的大小的.

  3. 切换Allegro PCB Editor

    操作系统:Windows 10 x64 工具1:Allegro PCB Editor 菜单File > Change Editor... 在Product Choices对话框中,就可以选择想要 ...

  4. ubantu/centos修改系统时间

    前言:有时系统上的时间和真实的时间对应不是,或者有特殊需求,需要修改系统时间.但是对应多台的服务器系统更改时间,手动的话很麻烦,这就需要写脚本或者搭建时间服务器了,统一时间,以下是对于一个不同系统修改 ...

  5. bzoj 2028(会场预约)

    题目描述 PP大厦有一间空的礼堂,可以为企业或者单位提供会议场地. 这些会议中的大多数都需要连续几天的时间(个别的可能只需要一天),不过场地只有一个,所以不同的会议的时间申请不能够冲突.也就是说,前一 ...

  6. 利用Centos服务器来搭建自己的splash,不再被安装的各种环境繁琐而担忧

    Centos7.5 ----- docker ------- splash               第一步:服务器环境的配置               第二步:dcoker环境的配置       ...

  7. Go Socket实现简单的HttpServer

    在上篇博客中写到如何用Python实现一个类似tomcat的简单服务器,接下来用go语言去实现 1. Go本身自己封装实现了非常简单的httpServer package main import ( ...

  8. POJ 1208 The Blocks Problem --vector

    http://poj.org/problem?id=1208 晚点仔细看 https://blog.csdn.net/yxz8102/article/details/53098575 #include ...

  9. 第二篇flask响应方式

    响应三件套 1.Flask中的HTTPResponse @app.route('/home') # app中的route装饰器 def home(): # 视图 return '登陆成功' #HTTP ...

  10. get、put、post、delete含义与区别

    1.GET请求会向数据库发索取数据的请求,从而来获取信息,该请求就像数据库的select操作一样,只是用来查询一下数据,不会修改.增加数据,不会影响资源的内容,即该请求不会产生副作用.无论进行多少次操 ...