R·ex / Zeng


音游狗、安全狗、攻城狮、业余设计师、段子手、苦学日语的少年。

由于 gin-cors 而带来的 Bug

我最近在写一个管理系统的后端项目,用的是 Go,使用了 gin 来写服务器。跟前端本地联调的时候一直是没问题的,但直到有一天前后端部署到了 Test 环境开始测试,发现所有的 GET 请求都没问题,但所有的 POST 和 PUT 请求都 403 了。我再三检查了一下 Request Authorizor Middleware,确认了并没问题(不然前端本地访问也不会正常),而且如果确实因为权限问题而 403,是有错误信息的,但现在没有任何信息。于是我连上服务器开始看 Log,发现无论是 gi...

SUCTF 2018 招新赛 Writeup

前几天偶然在群里看到了 SUCTF 的比赛链接,心想自己好久没有做过安全的东西了,这博客也好久没有写过正儿八经的安全文章了,于是就参加了一下。下面就写一写我过的那些题吧!题目是按照在比赛中的顺序,而不是难度顺序。REVbasic re运行程序发现输出了 flag format: SUCTF{xxxxxxxxxxxxxxx},拖进 IDA 发现该字符串在 sub_140012460 处,附近的代码如下:memset(s, 0, 31ui64); sub_140011159(std::cout...

由于浏览器的优化导致的 Bug 们

按理说,随着时间的发展,浏览器会做各种各样的优化来提升网页浏览的性能,但不是所有优化都能起到积极的效果,有的优化甚至属于“智障”级别。下面我就分享三个我遇到或听说的、由于浏览器自身的优化导致的一些 Bug。Passive Event Listeners我之所以知道了这个东西,是因为昨天邻居向我抱怨的一个问题,他的移动端页面使用了一个日期选择器,但在上下滑动选择日期的时候,Console 里面会报一堆这样的错误:[Intervention] Unable to preventDefault ...

Babel 如何转换 async-await 至 ES5

背景中午吃饭的时候跟同事讨论起了 async-await,我认为 async-await 是 Promise 的语法糖,但同事认为更贴近 Generator。于是趁下午摸鱼的时间查了一下资料,并自己用简单的例子对比了一下转换前后的代码,大概有了一定的了解。讲真,在刚看到转换结果的时候我整个人是懵逼的(虽然很早以前就看过了,毕竟每次 async-await 函数报错的时候调试器都会断在一个奇怪的文件里),因为这两段代码几乎没有太多的相似之处,转换之后还多了一段奇怪的函数(WTF?!):// ...

从前端性能监控发现的 Chrome Bug:eval、onerror 与同源策略

背景最近在做公司的一个前端监控项目,有一个需求是需要捕获前端错误并上报。这个需求其实很简单,使用 window.onerror 或者 window.addEventListener('error', ...) 就可以捕获异常数据,MDN 的 这篇文章 讲述了具体的用法,AlloyTeam 的 这篇文章 也讲了一些例子,以及针对触发了同源策略的应对方案。但是当我开始写自己的库时,才发现这个需求并不是那么一帆风顺。我在我们的前端项目里引入了自己写的库,然后故意触发一个语法错...

在 VSCode 中配置 Go 调试环境

前期准备作为一个 Go 开发者,首先需要把系统中的 Go 的环境配好(包括环境变量和包管理器),具体怎么配这儿就不说了。不过 Go 的项目似乎都需要跑在 $GOPATH/src 下面,感觉有点反人类。Go 最推荐的调试器就是 Delve,安装和使用方法这儿也不说了,正确安装后应该可以在命令行中直接运行 dlv 命令。想看结果的同学,可以直接跳到文章末尾,那儿有可以运行的配置。VSCode 作为微软爸爸的东西,我一直是很推崇的;刚好最近也在搞 Go 的项目,于是在想如何不用 JB 系软件(太...

雪碧图的应用场景 & 一种生成算法

CSS 雪碧图相信上古时期搞过前端的同学都知道,可以通过合并一些小图片、使用 CSS 控制 background-position 的方式来减少 HTTP 请求次数,从而优化网页加载时间,这就是 CSS 雪碧图(Spritesmith)。不过自从 HTTP/2 出来之后,这个用途就已经没什么意义了。当然,它也可以避免当正常状态与 hover 状态使用不同的图片时,首次 Hover 要现场加载图片的问题,所以雪碧图还是有一些用武之地的。CSS 雪碧图的优缺点以及其它资料网上太多,这儿就不写了...

Service Worker 踩坑指南(缓存与 WebP)

背景前天晚上在清理 Chrome 插件的时候,发现了好久之前因好奇而安装的 Lighthouse 插件,它是 Chrome 团队出的一个自动化页面审计工具,可以帮助开发者优化页面。继续怀着好奇的心理,我打开了我的网站主页,然后点了一下 Generate report 按钮,得分惨不忍睹……嗯由于特别惨不忍睹,所以我就不放结果了,放一张 Lighthouse 的界面代替好了……当然,优化的过程倒是不算太难,按照网上搜到的教程添加 Service Worker 和 Manifest,然后给一些...

对 CSS 变量的一点实践

什么是 CSS 变量之前我刚接触 CSS 预处理器的时候,被里面的变量功能给吸引了,你可以跟正常的编程语言一样定义变量,里面的值可以是各种各样的东西,例如 2rem 或者 #123456,甚至还可以对变量做一些运算,例如两个数值相加,或者把这个颜色变深 10%。后来无意间听说了 CSS 变量这个概念,于是上网查了一下,这儿的变量其实更相当于预定义的常量,因为 CSS 还不支持很多预处理器中的运算(calc 只能对数值进行运算)。用法其实很简单,例如我要写一套配色(这也是我网站目前的配色):...

使用 Puppeteer 编写 CTF XSS Checker

之前写过一篇文章:《使用 PhantomJS 来实现 CTF 中的 XSS 题目》,后来被群里的某大佬翻了出来并被吐槽了一番:好吧,现在是 8102 年了,该升级一下技术了。于是今天下班后没去打太鼓,转而去折腾 puppeteer。所需技术XSS 基础:相信点进来的同学都了解。Promise:相信搞过前端开发的同学都知道。async / await:相信大家都会把 Promise 转成这东西。Puppeteer:Chrome Headless 的 Node.JS 库,相信大家都听说过。Ph...

代码高亮的可行方案

Update 20180704:负向零宽断言我手边只有 Chrome 支持,所以目前还是不可用的,还好 PrismJS 提供了一种 Hack 的方法可以支持这个特性的很有限的部分:当传入 lookbehind 属性时,会删掉 match 数组的第零项,这样第一个括号的内容就成了匹配到的东西……我已经给 PrismJS 提了 Pull Request(地址在 这里),但尚未被合并,仅供参考。背景作为一个强迫症,我对博客里的代码高亮一向是要求很高的,一个好的代码高亮库,需要满足如下几点:屏幕大...

编写状态驱动的业务代码

什么是状态驱动的业务代码别看概念似乎很高大上,其实是我胡扯出来的……简单来说,就是把业务按照一个个状态进行拆分,然后通过状态来计算当前要执行的操作(后端)或当前要展示的界面(前端)。虽然这个做法很早就有了,而且绝对有很多人实践过了,但似乎一直没有一个专门的名词(也可能是我不知道),于是我就将其描述为“状态驱动的业务代码”了。几个业务场景多个步骤的页面我们的一个业务场景是(部分逻辑已修改):提供一个拣货的页面,操作员首先扫描订单上的条形码,页面上显示这个订单所需的货物列表,然后操作员再依次扫...

这是我们共同度过的

第 2868 天