blog
blog copied to clipboard
日常收集学习积累,方便复习查看
## HTTPS数据加密是否可以防止重放攻击? 否,加密可以有效防止明文数据被监听,但是却防止不了重放攻击。 ## 防重放机制 我们在设计接口的时候,最怕一个接口被用户截取用于重放攻击。重放攻击是什么呢?就是把你的请求原封不动地再发送一次,两次...n次,一般正常的请求都会通过验证进入到正常逻辑中,如果这个正常逻辑是插入数据库操作,那么一旦插入数据库的语句写的不好,就有可能出现多条重复的数据。一旦是比较慢的查询操作,就可能导致数据库堵住等情况。 付款接口,或者购买接口会造成损失 需要采用防重放的机制来做请求验证。 ## timestamp+nonce 我们常用的防止重放的机制是使用timestamp和nonce来做的重放机制。 timestamp用来表示请求的当前时间戳,这个时间戳当然要和服务器时间戳进行校正过的。我们预期正常请求带的timestamp参数会是不同的(预期是正常的人每秒至多只会做一个操作)。每个请求带的时间戳不能和当前时间超过一定规定的时间。比如60s。这样,这个请求即使被截取了,你也只能在60s内进行重放攻击。过期失效。 但是这样也是不够的,还有给攻击者60s的时间。所以我们就需要使用一个nonce,随机数。 nonce是由客户端根据足够随机的情况生成的,比如 md5(timestamp+rand(0, 1000)); 也可以使用UUID, 它就有一个要求,正常情况下,在短时间内(比如60s)连续生成两个相同nonce的情况几乎为0。 ## 服务端 服务端第一次在接收到这个nonce的时候做下面行为: 1 去redis中查找是否有key为nonce:{nonce}的string 2 如果没有,则创建这个key,把这个key失效的时间和验证timestamp失效的时间一致,比如是60s。 3 如果有,说明这个key在60s内已经被使用了,那么这个请求就可以判断为重放请求。 示例 那么比如,下面这个请求: http://a.com/?uid=123×tamp=1480556543&nonce=43f34f33&sign=80b886d71449cb33355d017893720666...
### path.resolve() 作用:path.resolve() 该方法将一些的 路径/路径段 解析为绝对路径。 语法:path.resolve( [from…],to ) 说明:将参数to位置的字符解析到一个绝对路径里,[from … ]为选填项,路径源; 用法: ``` node var path = require("path") //引入node的path模块 path.resolve('/foo/bar', './baz') // returns '/foo/bar/baz' path.resolve('/foo/bar', 'baz') // returns '/foo/bar/baz'...
### 移动设备实现1px的线 推荐使用的方法:伪类 + transform 原理是把原先元素的 border 去掉,然后利用 :before 或者 :after 重做 border ,并 transform 的 scale 缩小一半,原先的元素相对定位,新做的 border 绝对定位 单条 border ``` css .hairlines li{ position: relative; border:none; }...