【网络安全】——客户端安全(浏览器安全、XSS、CSRF、Clickjacking)
近在学习网络安全相关的知识,于是先从业内一本系统讲Web安全的书《白帽子讲Web安全》系统学习Web安全的相关知识。在此整理书中的知识层次,不求详尽,只求自己对整个Web安全梗概有所了解,另外记录下来以便以后温习。
本书总共分为四篇,作者的安全世界观,客户端脚本的安全、服务端应用的安全以及互联网公司安全运营。这一篇博客记录的是客户端脚本安全的知识,包括安全世界观、浏览器安全、XSS跨站脚本攻击、跨站点请求劫持CSRF、点击劫持和HTML5安全。
ps:阅读本书时,发现作者是年西安交通大学少年班出身,在大学期间就成立了“幻影”,后成为中国安全圈内极具影响力的组织 。算来还是学长,在此对学长的书以及学长在中国网络安全界的影响,膜一波。
世界观安全
安全三要素 CIA
- 机密性 Confidentiality
- 完整性 Integrity
- 可用性 Availability
安全评估
资产等级划分=》威胁分析=》风险分析=》确认解决方案
互联网的核心是由用户数据驱动的
互联网安全的核心问题,是数据安全的问题
威胁建模 STRIDE
伪装,篡改,抵赖,信息泄露,拒绝服务,提升权限
风险模型 DREAD
白帽子兵法
- Secure By Default 原则(黑白名单)
- 最小权限原则
- 纵深防御原则(1.多层面,多方面 2.正确的地方做正确的事)
- 数据与代码分离原则
- 不可预测性原则
浏览器安全
同源策略 Same Origin Policy
源 浏览器为了不让浏览器的页面行为形成干扰,提出“源”。
影响源的因素有:host、子域名、端口、协议
对于当前页面来说,重要在加载JS的域
在浏览器中 script、 img 、iframe 、link、 标签跨域加载资源,实际发起一次GET请求,但不能读写返回的内容
XMLHttpRequest受到同源策略影响
浏览器沙箱
挂马 在网页中插入恶意代码,利用浏览器漏洞执行任意代码
sandbox 资源隔离类模块,将不受信任的代码隔离在访问区之外,通过严格合法检验的API进行访问,各个模块分隔开
多进程浏览器 浏览器多进程,防止单页面崩溃导致全局崩溃
恶意网址拦截
浏览器周期性从服务器端获得一份最新的恶意网址黑名单
分类 1. 挂马网站 2. 钓鱼网站
PhishTank提供恶意网址黑名单
EVSSL证书(兼容X509标准)浏览器特别对待
高速发展的浏览器安全
Firefox 第一个支持CSP(Content Security Policy)的浏览器,插入一个http返回头
跨站脚本攻击 (XSS)
简介
XSS: Cross Site Script
黑客通过“HTML注入”篡改了网页,插入了恶意的脚本,从而在用户浏览网页时,控制用户浏览器的一种攻击。
分类
- 反射型XSS : 将用户输入的数据“反射”给浏览器 非持久性XSS
- 储存型XSS : 将用户输入的数据储存在服务端
- DOM Based XSS : 通过修改页面的DOM节点形成的XSS
XSS攻击进阶
XSS Payload : JS或者其他富客户端的脚本
常见:读取cookie对象,发起cookie劫持。(插入一张看不见的图片,将cookie发给远程服务器)
HttpOnly可以防止cookie劫持
强大的XSS Payload
- 构造GET和POST请求 1.构造form表单 2.XMLHttpRequest 发送POST请求
- XSS钓鱼 与用户进行交互,eg:伪造出登录框,将密码发送至服务器
- 识别用户浏览器 UserAgent对象,用JS脚本实现
- 识别用户安装的软件 ActiveX控件,很多第三方软件也会泄露电脑软件信息
- CSS History Hack 通过CSS发现用户曾经访问过的网站
- 获取用户真实IP地址 通过第三方软件完成,eg:JAVA的Java Applet接口
常见XSS攻击平台 Attack API,BeEF, XSS-Proxy
XSS worm Samy Worm 通过CSS构造出XSS
百度空间蠕虫
XSS构造技巧
- 利用字符编码
- 绕过长度限制(1将恶意代码隐藏起来 eg:location.hash不会发送 2.利用注释符绕过两个文本框从而增加长度)
- 使用base标签:设定紧接其后的相对路径的host
- window.name 由于window对象很多时候不受同源策略的影响
**变废为宝 碟中谍 Mission impossible **
- Apache Expect Header XSS :JS控制的浏览器环境无法控制http头,但是利用flash发起请求可以自定义大多数HTTP头
- Anehta的回旋镖:将要利用的反射型XSS嵌入一个储存型XSS中
Flash XSS 在Flash中可以嵌入ActionScript脚本 ,如果一定要用Flash,要求转码为flv静态文件,或者配置参数
JS 框架的XSS漏洞 信任了用户传入的参数,用户可能上传恶意代码
XSS的防御
- 四两拨千斤HttpOnly:禁止JS访问带有HttpOnly属性的Cookie
- 输入检查 : 客户端服务端同时检查 XSS Filter
- 输出检查 : 编码或者转义 JavaScriptEncode() HtmlEncode() ,大部分XSS漏洞可以再模板系统中解决
- 正确地防御XSS , XSS 实质上是一种 HTML注入,用户数据被当成HTML代码来执行,所以要在所有XSS可能出现的场景一一解决
- 构造script标签,执行脚本——使用HtmlEncode,以及JavaScriptEncode
- CSS,style中出现漏洞——使用encodeForCSS()函数
- 地址栏中——URLencode
- 处理富文本,富文本是完整的HTML代码——使用白名单
- 防御DOM Based XSS
跨站点请求伪造(CSRF)
CSRF简介
攻击者利用用户的身份,进行http请求,从而造成破坏,不需要获得cookie直接利用用户
CSRF进阶
浏览器的Cookie策略
cookie分为 Session Cookie临时cookie 和Third-party cookie 本地cookie ,IE,Safari默认拦截本地cookie的发送
P3P头的副作用 允许iframe,script等标签就不会拦截第三方cookie的发送
GET/POST的漏洞,php的$_REQUEST 和POST,创建隐形的iframe让用户发起POST请求
Flash CSRF (已经不能发送本地cookie)
CSRF Worm
CSRF防御
- 验证码,强制让用户与应用进行 交互才能发起合法的网络请求
- Referer Check 用于检查请求是否来自合法的源
- Anti CSRF Token
- CSRF能够成功的原因是攻击者可以猜到重要操作的所有参数
- 增加Token在Session或者Cookie中,提交时,需要验证表单中的Token
- Token使用原则(根据不可预测性原则):1.足够随机生成 2.可以考虑生成多个有效的Token解决多页面共存的问题 3.Token的保密性
- 防止Token泄露:1.Token放在表单中 2.敏感操作由GET换为POST 3.以form表单或者AJAX的形式提交
点击劫持(Clickjacking)
什么是点击劫持
视觉上的欺骗手段。攻击者通过使用一个透明的、不可见的iframe覆盖在一个网页上,然后诱使用户在该网页上进行操作,此时用户将在不知情的情况下点击透明的iframe页面。通过调整iframe的位置,可以诱使用户恰好点击iframe页面的一些功能按钮。
Flash点击劫持
在Flash游戏上覆盖一个iframe最终可以在用户不知情的情况下达到目的。
图片覆盖攻击
在可信的网站上,通过覆盖图片 XSIO 方式,让用户进入钓鱼网站或者利用用户完成某些操作。
拖拽劫持与数据窃取
浏览器拖拽事件,利用隐形的iframe来诱导用户完成需要的操作。
Clickjacking3.0触屏劫持
手机OS系统浏览器中很多时候会隐藏地址栏,从而攻击者伪造出一个iframe来欺骗用户。
Clickjacking防御
通过禁止跨域的iframe来防范。
- frame busting 防止iframe的嵌套
- X-Frame-Options (Http头)可以选择性决定是否加载或者是否加载不同源的iframe,属性值有DENY, SAMEORIGIN, ALLOW-FORM origin
HTML5安全
HTML5新标签
- 新标签的XSS : 、等新标签的XSS攻击
- iframe的sandbox: iframe新属性sandbox能够将iframe标签加载的内容视作一个独立的源,禁止执行脚本,表单禁止提交,插件禁止被加载,指向其他浏览对象的链接也会被禁止
- Link Types:noreferrer 浏览器请求该标签不再发送Referer,需要开发者手动添加
- Canvas的妙用:使用Canvas在线破解验证码
其他安全问题
- Cross-Origin Resource Sharing:jsonp,iframe合法跨域,发起请求的时候必须带上一个Origin Header(判断请求是否来自一个合法的源),服务器返回一个HTTPHeader
- postMessage——跨窗口传递:允许每一个window向其他窗口发送文本消息,从而实现跨窗口的消息传递,不受同源策略的影响。1.在接受窗口验证Domain甚至URL 2.对消息进行检查,防止XSS攻击
- Web Storage: 受到同源策略影响。但是当储存有敏感信息时,也有可能成为被攻击的目标。
【网络安全】——客户端安全(浏览器安全、XSS、CSRF、Clickjacking)的更多相关文章
- 关于安全性问题:(XSS,csrf,cors,jsonp,同源策略)
关于安全性问题:(XSS,csrf,cors,jsonp,同源策略) Ajax 是无需刷新页面就能从服务器获取数据的一种方法.它的核心对象是XHR,同源策略是ajax的一种约束,它为通信设置了相同的协 ...
- XSS/CSRF跨站攻击和防护方案
Xss(Cross Site Scripting 跨站脚本攻击)/CSRF(Cross-site request forgery 跨站请求伪造),它与著名的SQL注入攻击类似,都是利用了Web页面的编 ...
- XSS CSRF
XSS CSRF XSS 参考 https://zh.wikipedia.org/wiki/%E8%B7%A8%E7%B6%B2%E7%AB%99%E6%8C%87%E4%BB%A4%E7%A2%BC ...
- H5案例分享:使用JS判断客户端、浏览器、操作系统类型
使用JS判断客户端.浏览器.操作系统类型 一.JS判断客户端类型 JS判断客户端是否是iOS或者Android手机移动端 通过判断浏览器的userAgent,用正则来判断手机是否是ios和Androi ...
- DedeCMS Xss+Csrf Getshell \dede\file_manage_control.php
目录 . 漏洞描述 . 漏洞触发条件 . 漏洞影响范围 . 漏洞代码分析 . 防御方法 . 攻防思考 1. 漏洞描述 对这个漏洞的利用方式进行简单的概括 . 这个漏洞的利用前提是需要登录到后台进行操作 ...
- ASP.NET程序单客户端(浏览器)登录的实现方案
需求描述:当用户的账户在另一个浏览器中登录的时候,需要把当前浏览器的登录强制下线.这种需求在业务系统,或付费视频服务网站中比较常见. 这种需求我称之为"单客户端(浏览器)"登录,与 ...
- 《笔记篇》非JS方法跳转到一个新页面,主要防止客户端禁止浏览器JS以后的跳转异常
用非JS方法打开一个新页面,主要防止客户端禁止浏览器JS以后的跳转失效 <meta http-equiv="refresh" content="0; url=htt ...
- 深入理解OAuth2.0 XSS CSRF CORS 原理
基于Token的WEB后台认证机制 http://www.cnblogs.com/xiekeli/p/5607107.html 深入理解OAuth2.0协议http://blog.csdn.net/s ...
- CSRF、XSS、clickjacking、SQL 的攻击与防御
CSRF攻击 原理: 跨站请求伪造.是一种挟制用户在当前已登录的Web应用程序上执行非本意的操作的攻击方法. 网站通过cookie来实现登录功能.而cookie只要存在浏览器中,那么浏览器在访问含有这 ...
- Web攻防之XSS,CSRF,SQL注入
摘要:对Web服务器的攻击也可以说是形形色色.种类繁多,常见的有挂马.SQL注入.缓冲区溢出.嗅探.利用IIS等针对Webserver漏洞进行攻击.本文结合WEB TOP10漏洞中常见的SQL注入,跨 ...
随机推荐
- django 引入静态文件(前端样式等)
1.首先在主项目目录下settings.py文件中添加如下代码 2.然后在主项目目录,app项目同级目录下新建static文件夹并在文件夹中新建css文件夹,用于存放css文件,如下: 3.前端渲染时 ...
- web测试喜事连连--草稿箱功能
“草稿箱”功能很常见吧,编辑内容后,不想发布的话,就先存为草稿.啥时候想公开了,发布即可. 今天发生个啥事呢,让作为Tester的我,哭笑不得. 开发部经理老F,反馈一个客户需求,发到群里让大家讨论. ...
- h5样式
禁止长按默认事件 安卓(android): window.ontouchstart = function(e) { e.preventDefault(); }; 苹果(ios): -webkit-to ...
- python基础学习day02
pycharm的安装以及简单使用 辅助开发软件,代码逐行调试,设计高端 python的种类: CPython:官方推荐可以转换成c能够识别的字节码. JPython:可以转化为Java语言能够 ...
- Asp.Net Core 中IdentityServer4 授权原理及刷新Token的应用
一.前言 上面分享了IdentityServer4 两篇系列文章,核心主题主要是密码授权模式及自定义授权模式,但是仅仅是分享了这两种模式的使用,这篇文章进一步来分享IdentityServer4的授权 ...
- Gorm 预加载及输出处理(二)- 查询输出处理
上一篇<Gorm 预加载及输出处理(一)- 预加载应用>中留下的三个问题: 如何自定义输出结构,只输出指定字段? 如何自定义字段名,并去掉空值字段? 如何自定义时间格式? 这一篇先解决前两 ...
- Angular入门之环境搭建(VS code)(转载)
安装Visual Studio Code VS code和我们常用的VS压根不是一回事,它只是一个开源的轻量级编辑器,而不是IDE,因为支持typescript语法,且插件功能丰富,所以选择 官网下载 ...
- WSGI标准、MVC和MTC框架
WSGI服务: wsgiref模块其实就是将整个请求信息给封装了起来,就不需要你自己处理了,假如它将所有请求信息封装成了一个叫做request的对象,那么你直接request.path就能获取到用户这 ...
- Selenium系列(五) - 键盘操作详细解读
如果你还想从头学起Selenium,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1680176.html 其次,如果你不懂前端基础知识, ...
- 如何从零基础开始学习LoadRunner12(一)
如何从零基础开始学习LoadRunner12(一) 上一篇文章讲到了如何安装LR12的教程,这一篇文章来讲一下怎么利用LoadRunner自带的Sample来学习LoadRunner的基本使用. 首先 ...