access-token

WEB应用是开放的,WEB前端代码也是公开的,和后端交互的接口如果没有经过特殊处理(加密/token),那么就是裸露的,只要知道api地址,那么就能随便获取应用数据。这样应用数据就很容易被人爬取或者恶意盗刷,典型的短信被恶意盗刷。

公司理财产品的短信接口就是一个裸接口,只要手机号就可以任意盗刷,当然背后有根据手机号,ip地址做了请求限制,但还是不够。后面就加了一定时间内一定请求次数的Token,后面观察,基本没有被刷的迹象,说明新的机制还是起到很大作用。当然这个机制不仅是用于防短信盗刷,可用于任意的裸接口防护。

原理很简单,就是在web页面请求的时候由后端按一定的算法注入token到页面中去,然后前端可以通过对应的规则取到token,在请求接口数据时带上去就能在后端对token进行验证,验证通过就能正常请求到数据。如果是native app ,可通过加密的方法请求接口来获取token,最简单直接的方式就是native app 客户端使用一段字符串+时间戳(从后端获取)进行加密,然后请求后端接口,接口对数据进行解密,对时间戳对比,在一段时间内认为有效(避免加密信息被拦截,所以加了时间戳校验),从而获取token。

当然web应用都是公开的,所有源码理论上都是能获取到的。那么后端向web页面注入token的方式也能被破解,所以,后端注入token的形式可定制,比如注入到请求,或者自己实现一套算法,增加被破解的难度。

把这套机制整理成一个独立的npm包access-token-api,方便多项目复用。

阅读全文 >

custom_weixin_share_content

如何在不接入微信API的情况下自定义分享内容(图片、链接、标题)

1 设置分享title:动态改变document.title值即可:

1
document.title = 'test'

2 设置分享图片:在页面隐藏一张尺寸大于290*290的图(图片需要容器包裹,设置容器css属性display:none即可):

1
<div style="display:none"><img src="share.jpg" /></div>

3 设置分享的链接:动态修改document.documentURI的值即可(safari下,document.documentURI为只读属性,可借助history.pushState )

1
2
3
4
//android:
document.documentURI = "http://www.navyxie.com"//经测试wechat6.3.13版本下此方法已失效,可使用同下IOS的方法自定义。
//ios:
window.history.pushState("weixin-share-url", "weixinshare", "http://www.navyxie.com");//只可设置同域链接

具体的运行原理可以看 微信Android SDK 中的 js 源码分析。

redis_lock

场景:使用node+mongo搭建web应用时,常常遇到并发问题导致创建一条数据的时候会同时创建多条。

通过redis set 方法 配合 ‘NX’ 选项即可实现锁机制。

主要的方法有三个:

lock(加锁)

unlock(解锁)

extend(更改锁过期时间)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Redlock.prototype.lock = function(resource,ttl,callback){
var self = this;
var _val = _random();
return new Promise(function(resolve, reject) {
var lock = new Lock(self, resource, _val);
self.client.SET(resource,_val,'EX',ttl,'NX',function(err,data){
if(!err && data === 'OK'){
return resolve(lock);
}else{
var err = err || 'resource: '+resource+' is locked.';
self.emit('lockError', err);
return reject(err);
}
})
}).asCallback(callback);
}

阅读全文 >

weixin-js-sdk

微信web开发者工具

在调试js-sdk api showMenuItems 时存在bug,不按预期执行(本想只显示发送给朋友和分享到朋友圈选项,结果显示所有的选项),部署到真实环境是正常的。

OS:MacBook Pro (10.11.4)
微信web开发者工具反馈:v0.5.0(升级到最新版v0.6.0同样存在这个问题)

附图

阅读全文 >

{% if theme.baidu_push %} {% endif %}