博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
XSS AND CSRF
阅读量:7079 次
发布时间:2019-06-28

本文共 2507 字,大约阅读时间需要 8 分钟。

大家都知道XSS和CSRF是网站中常见的两种攻击形式

XSS

一、概念

XSS攻击全称跨站脚本攻击,是为不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS,XSS是一种在web应用中的计算机安全漏洞,它允许恶意web用户将代码植入到提供给其它用户使用的页面中。

简单讲就是将你的页面中插入一些脚本,脚本中带攻击代码来攻击你的网站

二、常见的形式

xss类型(反射型、持久型、DOM-Based)

1、DOM-Based

不基于后端,DOM-Based 当用户更改了某个标签的属性 或往某个标签中塞入一些内容 (有可能是script标签) document.write

```    
DOM-Based
```复制代码
2、反射型

即客户端传给服务器什么,服务器就原封不动的返回来。

1)url中带XSS攻击

例如:我们用express在3000端口下起一个服务,当我们访问welcome的时候如果在当前的url中传入什么内容,页面上就展示什么内容。这时候我将url传入的内容改成一段脚本

http://localhost:3000/welcome?type=复制代码

chrome浏览器上会出现一个报错页面,chrome浏览器自身对于这种攻击性的代码做了拦截处理。内容如下:

该网页无法正常运作 Chrome 在此网页上检测到了异常代码。为保护您的个人信息(例如密码、电话号码和信用卡信息),Chrome 已将该网页拦截。 请尝试访问该网站的首页。 ERR_BLOCKED_BY_XSS_AUDITOR

safari 浏览器会拦截这个请求,并报出XSS提示

The XSS Auditor refused to execute a script in '' because its source code was found within the request. The auditor was enabled because the server did not send an 'X-XSS-Protection' header.

QQ浏览器和火狐浏览器上就会被攻击 弹出alert(1),这时候攻击者就可以做她们想做的事情了,比如获取用户的cookie等。

代码如下:

const express = require('express'); const app = express();  app.get('/welcome', function (req, res) {    res.send(`${req.query.type}`) });  app.listen(3000);复制代码
3、持久型

一个评论的输入框,输入评论内容后提交给服务器,并在页面展示该条评论。 如果这时候提交的是一段脚本的话,在页面显示时会遭到攻击。如果这些评论列表接口的数据是共享的话,那不管是哪个用户访问这个评论页面都会受到攻击,而且是持久的。

三、预防手段

DOM-Based: url 转义输入的内容 encodeURIComponent

$('.box').html(``)复制代码

总的来说预防手段就是编码

CSRF

一、概念

CSRF(Cross-site request forgery)跨站请求伪造,也被称为“One Click Attack”或者Session Riding,通常缩写为CSRF或者XSRF,是一种对网站的恶意利用。尽管听起来像跨站脚本(XSS),但它与XSS非常不同,XSS利用站点内的信任用户,而CSRF则通过伪装来自受信任用户的请求来利用受信任的网站。与XSS攻击相比,CSRF攻击往往不大流行(因此对其进行防范的资源也相当稀少)和难以防范,所以被认为比XSS更具危险性。

简单讲就是冒充或伪造用户身份去做一些事情(比如别人写了一个钓鱼网站,当你访问钓鱼网站的时候,它可以借走你的身份去干你想干的事)

二、常见的形式

用户A -> 访问正规的网站A -> 在网站A中产生cookie -> 在网站A用添加一些图片 文字等吸引用户的东西 来引导用户来访问钓鱼网站B -> 钓鱼网站B中内嵌iframe等 通过iframe镶嵌进来的页面 带着cookie向网站A发起请求 ->网站WebA接收到用户浏览器的请求,WebA无法分辨请求由何处发出,由于浏览器访问时带上用户的Cookie,因此WebA会响应浏览器的请求,如此一来,攻击网站WebB就达到了模拟用户操作的目的。

三、预防手段

防范csrf攻击(验证码、referer、token)

1、验证码

大部分网站添加验证码的主要作用是用来防止并发量的(例如:12306),可以起到一定的防御作用并屏蔽一些问题,但不是最优的解决方案。

2、referer(判断来源)

如果不是当前网站发来的请求,那非常可能是被其他网站攻击了。不靠谱,因为Referer只是一个请求头,可以用node自己发请求来改变它。

3、token

CSRF 攻击之所以能够成功,是因为黑客可以完全伪造用户的请求,该请求中所有的用户验证信息都是存在于 cookie 中,因此黑客可以在不知道这些验证信息的情况下直接利用用户自己的 cookie 来通过安全验证。要抵御 CSRF,关键在于在请求中放入黑客所不能伪造的信息,并且该信息不存在于 cookie 之中。可以在 HTTP 请求中以参数的形式加入一个随机产生的 token,并在服务器端建立一个拦截器来验证这个 token,如果请求中没有 token 或者 token 内容不正确,则认为可能是 CSRF 攻击而拒绝该请求。 这种方法要比检查 Referer 要安全一些,token 可以在用户登陆后产生并放于 session 之中,然后在每次请求时把 token 从 session 中拿出,与请求中的 token 进行比对。

不要厌烦熟悉的事物,每天都进步一点;不要畏惧陌生的事物,每天都学习一点;

转载地址:http://zdvml.baihongyu.com/

你可能感兴趣的文章
16进制字符串和字节数组的转换
查看>>
解决ImportError: cannot import name webdriver
查看>>
如何将Windows Server 2012的Evaluation版本转为正式版?
查看>>
[iOS] UITextField隐藏软键盘心得(隐藏自身软键盘、点击Return自动转到下个文本框、轻触背景隐藏软键盘)...
查看>>
hdu 1853(Cyclic Tour)
查看>>
ALL about SYSDBA and SYSOPER Privileges in Oracle [ID 50507.1]
查看>>
form表单回车提交问题
查看>>
让jQuery Tools Scrollable控件在Mobile Web里面支持resize功能
查看>>
配置 CACTI 监控 MySQL 数据库状态
查看>>
WCF的用户名密码认证
查看>>
KMP 求子串
查看>>
【实战HTML5与CSS3 第三篇】我第一个HTML5网页诞生了(提供源码)
查看>>
NS2下实现MAC跨层设计(转)
查看>>
C#访问远程共享加锁文件夹
查看>>
静态编译mysql库到程序中遇到的问题
查看>>
JavaScript Event Loop 浅析
查看>>
在独立的javascript文件中获取当前项目的http路径
查看>>
Yaf(Yet Another Framework)用户手册
查看>>
http://daffodil.codeplex.com/
查看>>
反码符号-128有8位二进制表示的原码、反码和补码
查看>>