前一段时间,在EtherDream大神的博客里看到关于XSS防火墙的一系列文章,觉得很有意思.刚好科创要做一个防火墙,就把XSS前端防火墙作为一个创新点,着手去实现了. 在实现过程中,由于各种原因,比如说JavaScript不熟练啦,SQL注入防火墙的干扰啦,出现了一系列问题,在文章中也会提到. 0x00 对XSS的分类 根据触发方式和可执行脚本的位置,把XSS分成如下几类,每一种都有不同的防御方式: 1) 内嵌型,直接内嵌在HTML标签中的一些可执行JS代码的属性中,如: <a href=&quo…
上一篇讲解了钩子程序的攻防实战,并实现了一套对框架页的监控方案,将防护作用到所有子页面. 到目前为止,我们防护的深度已经差不多,但广度还有所欠缺. 例如,我们的属性钩子只考虑了 setAttribute,却忽视还有类似的 setAttributeNode.尽管从来不用这方法,但并不意味人家不能使用. 例如,创建元素通常都是 createElement,事实上 createElementNS 同样也可以.甚至还可以利用现成的元素 cloneNode,也能达到目的.因此,这些都是边缘方法都是值得考虑…
昨天尝试了一系列的可疑模块拦截试验,尽管最终的方案还存在着一些兼容性问题,但大体思路已经明确了: 静态模块:使用 MutationObserver 扫描. 动态模块:通过 API 钩子来拦截路径属性. 提到钩子程序,大家会联想到传统应用程序里的 API Hook,以及各种外挂木马.当然,未必是系统函数,任何 CPU 指令都能被改写成跳转指令,以实现先运行自己的程序. 无论是在哪个层面,钩子程序的核心理念都是一样的:无需修改已有的程序,即可先执行我们的程序. 这是一种链式调用的模式.调用者无需关心…
昨天尝试了一系列的可疑模块拦截试验,尽管最终的方案还存在着一些兼容性问题,但大体思路已经明确了: 静态模块:使用 MutationObserver 扫描. 动态模块:通过 API 钩子来拦截路径属性. 提到钩子程序,大家会联想到传统应用程序里的 API Hook,以及各种外挂木马.当然,未必是系统函数,任何 CPU 指令都能被改写成跳转指令,以实现先运行自己的程序. 无论是在哪个层面,钩子程序的核心理念都是一样的:无需修改已有的程序,即可先执行我们的程序. 这是一种链式调用的模式.调用者无需关心…
例如,我们的属性钩子只考虑了 setAttribute,却忽视还有类似的 setAttributeNode.尽管从来不用这方法,但并不意味人家不能使用. 例如,创建元素通常都是 createElement,事实上 createElementNS 同样也可以.甚至还可以利用现成的元素 cloneNode,也能达到目的.因此,这些都是边缘方法都是值得考虑的. 下面我们对之前讨论过的监控点,进行逐一审核. 内联事件执行 eval 在第一篇文章结尾谈到,在执行回调的时候,最好能监控 eval,setTi…
上一篇介绍的系统,已能预警现实中的大多数 XSS 攻击,但想绕过还是很容易的. 由于是在前端防护,策略配置都能在源代码里找到,因此很快就能试出破解方案.并且攻击者可以屏蔽日志接口,在自己电脑上永不发出报警信息,保证测试时不会被发现. 昨天提到最简单并且最常见的 XSS 代码,就是加载站外的一个脚本文件.对于这种情况,关键字扫描就无能为力了,因为代码可以混淆的千变万化,我们看不出任何异常,只能将其放行. 因此,我们还需增加一套可疑模块跟踪系统. 被动扫描 和之前说的一样,最简单的办法仍是遍历扫描.…
由于是在前端防护,策略配置都能在源代码里找到,因此很快就能试出破解方案.并且攻击者可以屏蔽日志接口,在自己电脑上永不发出报警信息,保证测试时不会被发现. 昨天提到最简单并且最常见的 XSS 代码,就是加载站外的一个脚本文件.对于这种情况,关键字扫描就无能为力了,因为代码可以混淆的千变万化,我们看不出任何异常,只能将其放行. 因此,我们还需增加一套可疑模块跟踪系统. 被动扫描 和之前说的一样,最简单的办法仍是遍历扫描.我们可以定时分析页面里的脚本元素,发现有站外地址的脚本就发送预警日志. 如果昨天…
到目前为止,我们把能用前端脚本防御 XSS 的方案都列举了一遍. 尽管看起来似乎很复杂累赘,不过那些是理论探讨而已,在实际中未必要都实现.我们的目标只是为了预警,能发现问题就行,并非要做到滴水不漏的程度. 事实上,HTML5 早已制定了一套浏览器 XSS 解决方案 -- Content Security Policy,并且大多主流浏览器实现了这个标准. 既然我们使用前端脚本重新实现一遍,因此得在各个方面占有优势. 兼容性 CSP 目前主流浏览器大多已支持,IE10.11 支持部分功能.对于 IE…
到目前为止,我们把能用前端脚本防御 XSS 的方案都列举了一遍. 尽管看起来似乎很复杂累赘,不过那些是理论探讨而已,在实际中未必要都实现.我们的目标只是为了预警,能发现问题就行,并非要做到滴水不漏的程度. 事实上,HTML5 早已制定了一套浏览器 XSS 解决方案 —— Content Security Policy,并且大多主流浏览器实现了这个标准. 既然我们使用前端脚本重新实现一遍,因此得在各个方面占有优势. 兼容性 CSP 目前主流浏览器大多已支持,IE10.11 支持部分功能.对于 IE…
关于 XSS 怎样形成.如何注入.能做什么.如何防范,前人已有无数的探讨,这里就不再累述了.本文介绍的则是另一种预防思路. 几乎每篇谈论 XSS 的文章,结尾多少都会提到如何防止,然而大多万变不离其宗.要转义什么,要过滤什么,不要忘了什么之类的.尽管都是众所周知的道理,但 XSS 漏洞十几年来几乎从未中断过,不乏一些大网站也时常爆出,小网站更是家常便饭. 预警系统 事实上,至今仍未有一劳永逸的解决方案,要避免它依旧使用最古老的土办法,逐个的过滤.然而人总有疏忽的时候,每当产品迭代更新时,难免会遗…
XSS报警机制(前端防火墙:第二篇) 在第一章结尾的时候我就已经说了,这一章将会更详细的介绍前端防火墙的报警机制及代码.在一章出来后,有人会问为什么不直接防御,而是不防御报警呢.很简单,因为防御的话,攻击者会定位到那一段的JavaScript代码,从而下次攻击的时候绕过代码.如果不防御而报警的话,攻击者会降低警觉,不会在看JavaScript代码(至少我是这样).回到正题,下面说的代码,是基于thinkphp框架和bootstrap3.3.5框架.如果你的网站没有使用thinkphp3.2.3框…
为适应不同开发人员,abp rezo的UI实现了spa和mpa两套: spa--Single-page Application(单页面应用),默认"http://localhost/Account/Login"登录后转到spa界面.spa是基于angluarjs开发,angluarjs优点不细说,但学习成本较高: mpa--Multi-page Application (多页面应用),地址:"http://localhost/Mpa/Dashboard".mpa基于…
最近临时一个负责公司官网的妹纸请假,于是临时接手了下官网的项目,官网都是静态页面,算是很简单的,但发现页面挺多,而每个页面总有部分是和其他页面一模一样的,比如页头.页尾等,这样就导致一个地方的修改要在其他N个页面手动重复的改下,当然,这是我无法忍受的,于是思考下怎样将公用的部分独立出来供调用. 开始想直接用js异步请求一个公用模块的页面即可,但考虑到官网的SEO问题,就放弃了,接着就想能否用webpack将代码分为开发环境和生产环境,在开发环境进行页面的拼接,完成后输出到生产环境,这样就不会影响…
马甲哥继续在同程艺龙写一点大前端: 今天我们来了解一下 如何拦截axios请求/响应? axios是一个基于 promise 的网络请求库,可以用于浏览器和 node.js, promise 类似于C#的Task async/await机制,以同步的代码风格编写异步代码. axios一般发起的是ajax请求,我们一般会封装处理一些通用的 请求/响应动作. 比如马甲哥就遇到: 在每次ajax跨域请求时,允许携带第三方凭据(cookie.authorization) 封装4xx响应码的处理逻辑 其中…
CommonJS的模块加载机制 CommonJS模块的加载机制是,输入的是被输出的值的拷贝.也就是说,一旦输出一个值,模块内部的变化就影响不到这个值. 例如: // lib.js var counter = 3; function incCounter() { counter++; } module.exports = { counter: counter, incCounter: incCounter, }; // main.js var counter = require('./lib').…
*.do :只拦截.do文件 / :拦截除jsp页面的所有请求,包括restful类型的url /*  :拦截所有请求包括jsp页面…
原因: spring监测到是.html来访问,它就会认为需要返回的是html页面.如果返回的不是html,会报406错误 解决: 提供多种后缀拦截方式,工程里web.xml配置 分析: HTTP 406错误是HTTP协议状态码的一种,表示无法使用请求的内容特性来响应请求的网页,也就是返回的不是想要的. 之所以用伪静态化.html后缀是为了增加SEO权重,可以返回页面以.html后缀,查询数据.生成数据等操作可用别的后缀替代 还有一种解决方法,我在web.xml加两种拦截后缀名,.html,.sh…
测试网站: http://testphp.vulnweb.com/login.php 浏览器代理设置为:127.0.0.1:8080 查看拦截流量: 方式1:通Proxy - Intercept 方式二:Proxy - HTTP history…
'use strict'; function f(x) { // do something... } var readline = require('readline'); //创建readline接口实例 var rl = readline.createInterface({ input: process.stdin, output: process.stdout }); // ======= 方法一 ========= rl.question("input something:",…
1. 什么是XSS攻击? 正常的页面被渗出了攻击者的js脚本,这些脚本可以非法地获取用户信息,然后将信息发送到attacked的服务端. XSS是需要充分利用输出环境来构造攻击脚本的 2. 危害 非法获取用户cookie.ip等内容 窃取用户输入的内容 劫持浏览器,形成DDOS攻击 3. 类型 Reflected XSS:可以理解为参数型XSS攻击,攻击的切入点是url后面的参数 // 合法页面 url: http://aa.com?test=1234 <input type="text&…
作为前端,一直以来都知道HTTP劫持与XSS跨站脚本(Cross-site scripting).CSRF跨站请求伪造(Cross-site request forgery).但是一直都没有深入研究过,前些日子同事的分享会偶然提及,我也对这一块很感兴趣,便深入研究了一番. 最近用 JavaScript 写了一个组件,可以在前端层面防御部分 HTTP 劫持与 XSS. 当然,防御这些劫持最好的方法还是从后端入手,前端能做的实在太少.而且由于源码的暴露,攻击者很容易绕过我们的防御手段.但是这不代表我…
作为前端,一直以来都知道HTTP劫持与XSS跨站脚本(Cross-site scripting).CSRF跨站请求伪造(Cross-site request forgery).但是一直都没有深入研究过,前些日子同事的分享会偶然提及,我也对这一块很感兴趣,便深入研究了一番. 最近用 JavaScript 写了一个组件,可以在前端层面防御部分 HTTP 劫持与 XSS. 当然,防御这些劫持最好的方法还是从后端入手,前端能做的实在太少.而且由于源码的暴露,攻击者很容易绕过我们的防御手段.但是这不代表我…
说到跨站资源监控,首先会联想到『Content Security Policy』.既然 CSP 好用,我们何必自己再搞一套呢.那就先来吐槽下 CSP 的缺陷. 目前的 CSP 日志不详细 用过 CSP 的都很郁闷,上报的只有违规的站点名,却没有具体路径.这是缺陷,还是特意的设计? 显然,CSP 是为安全定制的,里面的规范自然要严格制定,否则就会带来新的安全问题.如果支持详细路径的上报,那又会引出什么问题? 由于 CSP 会上报所有的请求,甚至包括重定向的,因此可以用来探测重定向后的地址.假如已登…
前言 之前介绍了 HTTPS 前端劫持 的方案,虽然很有趣,然而现实却并不理想.其唯一.也是最大的缺陷,就是无法阻止脚本跳转.若是没有这个缺陷,那就非常完美了 -- 当然也就没有必要写这篇文章了. 说到底,还是因为无法重写 location 这个对象 -- 它是脚本跳转的唯一渠道.尽管也流传一些 Hack 能勉强实现,但终究是不靠谱的. 事实上,在最近封稿的 HTML5 标准里,已非常明确了 location 的地位 -- Unforgeable. 这是个不幸的消息.不过也是件好事,让我们彻底打…
之前介绍了 HTTPS 前端劫持 的方案,尽管非常有趣.然而现实却并不理想. 其唯一.也是最大的缺陷.就是无法阻止脚本跳转.若是没有这个缺陷,那就非常完美了 -- 当然也就没有必要写这篇文章了. 说究竟,还是由于无法重写 location 这个对象 -- 它是脚本跳转的唯一渠道.虽然也流传一些 Hack 能勉强实现,但终究是不靠谱的. 其实,在近期封稿的 HTML5 标准里,已很明白了 location 的地位 -- Unforgeable. 这是个不幸的消息.只是也是件好事,让我们彻底打消各种…
封装 axios 模块 封装背景 使用axios发起一个请求是比较简单的事情,但是axios没有进行封装复用,项目越来越大,会引起越来越多的代码冗余,让代码变得越来越难维护.所以我们在这里先对 axios 进行二次封装,使项目中各个组件能够复用请求,让代码变得更容易维护. 封装要点 统一 url 配置 统一 api 请求 request (请求) 拦截器,例如:带上token等,设置请求头 response (响应) 拦截器,例如:统一错误处理,页面重定向等 根据需要,结合 Vuex 做全局的…
x64内核HOOK技术之拦截进程.拦截线程.拦截模块 一丶为什么讲解HOOK技术. 在32系统下, 例如我们要HOOK SSDT表,那么直接讲CR0的内存保护属性去掉. 直接讲表的地址修改即可. 但是在64位系统下,不可以这样操作了. 第一是因为 SSDT表加密了. 第二是 SSDT表你就算解密了. 那么你的API的地址也会很远. SSDT表放不下4G以外的地址. 所以也不能放. 而现在.试想一下, 杀毒软件也要在内核中做点手脚. 如果不能HOOK了,它们该怎么发展那? 所以到了win7 (64…
项目登录流程如下 用户进入前端登录界面,输入账号密码等,输入完成之后前端发送请求到后端(拦截器不会拦截登录请求),后端验证账号密码等成功之后生成Token并存储到数据库,数据库中包含该Token过期时间,然后返回生成的Token到前端. 前端收到Token,表示登录成功,把这个Token存储到浏览器Cookie中.然后跳转到用户中心页面,用户中心页面从浏览器Cookie中扣出Token,跟随请求用户数据接口一起带到后端. 后端通过拦截器拦截到这个请求,去判断这个Token是否有效,有效就放过去做…
在前面随笔介绍了ABP+Vue前后端的整合处理,包括介绍了ABP的后端设计,以及前端对ABP接口API的ES6的封装,通过JS的继承类处理,极大减少了重复臃肿的代码,可以简化对后端API接口的封装,而且前端使用Element组件,很好展示API获得的数据,通过在界面中展示树状列表,以及表格列表数据,可以构建一个很好的列表展示界面,而常规的界面,通过也包括了新增.编辑.查看等展示场景,一般我们通过对话框的方式进行展示处理.本篇随笔以权限管理模块中的用户管理为媒介,进行相关功能的介绍和界面设计的处理…
Web应用防火墙,或叫Web应用防护系统(也称为:网站应用级入侵防御系统.英文:Web Application Firewall,简称: WAF).利用国际上公认的一种说法:Web应用防火墙是通过执行一系列针对HTTP/HTTPS的安全策略来专门为Web应用提供保护的一款产品. 一.WAF产生的背景: 过去企业通常会采用防火墙,作为安全保障的第一道防线:当时的防火墙只是在第三层(网络层)有效的阻断一些数据包:而随着web应用的功能越来越丰富的时候,Web服务器因为其强大的计算能力,处理性能,蕴含…