Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/scscms/jsonp_sandbox
JSONP是一个广为使用的跨域获取数据的解决方案,但其安全需要沙箱保护。
https://github.com/scscms/jsonp_sandbox
Last synced: 16 days ago
JSON representation
JSONP是一个广为使用的跨域获取数据的解决方案,但其安全需要沙箱保护。
- Host: GitHub
- URL: https://github.com/scscms/jsonp_sandbox
- Owner: scscms
- Created: 2016-12-09T07:43:23.000Z (about 8 years ago)
- Default Branch: master
- Last Pushed: 2016-12-09T07:47:30.000Z (about 8 years ago)
- Last Synced: 2024-11-11T03:36:46.646Z (2 months ago)
- Language: JavaScript
- Size: 6.84 KB
- Stars: 0
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# jsonp-sandbox安全沙箱shine
## 什么是jsonp-sandbox
> ajax中常常提到一个JSONP请求,其实JSONP与普通ajax还是有区别的。JSONP是一个广为使用的跨域获取数据的解决方案,它的原理是加载动态生产的 `script` 内容而实现跨域。由于实现机制,JSONP 很容产生安全问题,例如脚本被黑客或者运营商劫持等。
## 前提
|浏览器|H5 sandbox|srcdoc|execScript|
|:-----|:-----:|:-----:|:-----:|
|IE8以下|不支持|支持|
|IE9|不支持|不支持|支持|
|IE10|支持|不支持|支持|
|IE11|支持|不支持|不支持|
|chrome|支持|支持|不支持|
|firefox|支持|支持|不支持|## 处理
所有请求先在本页面创建一个iframe隔离请求,重点防范top,parent访问。
处理分三种情况:
- 1.IE9及以下
借助`execScript`使用同名函数覆盖top,parent对象。
ie9因不能覆盖Document及HTMLDocument,所以使用破坏原型上的getter,setter属性。
- 2.IE10及以上
虽然支持sandbox但并不友好。同样使用同名函数方法覆盖alert、confirm等。
- 3.chrome、firefox等现代浏览器
使用H5 sandbox沙箱完美隔离。IE9及以下使用预留的`parent`通信,其他通过`postMessage`通信。
## 使用
直接引入:
``` html
```
**JSONP.get(url,options)****url** 必填
**options** 可选
* `url` 如果填写将覆盖第一个参数
* `key` JSONP 指定 KEY,默认是 `callback`
* `callback` JSONP 指定回调函数名
1.随机自动生成
2.如果指定值,将覆盖前面的值
3.以key的值在url中截取,如果存在将覆盖前面的值
* `success` 成功回调函数
* `error` 失败回调函数
* `data` URL 附加的请求数据
* `cache` 是否要禁止缓存,为真是将在请求里添加一个随机数
* `timeout` 超时(毫秒)必须不能小于100## API
**JSONP.get(url, success, error)**
``` javascript
JSONP.get('http://api.com/user', function (data) {
console.log(data);
});
```例如:
``` javascript
JSONP.get('http://api.com/users/35', {
value: 'jsonp_001',
key: 'callback'
})
```最终请求出去的 URL 类似:
```
http://api.com/users/35?callback=jsonp_001
```## 演示
```javascript
document.cookie = 'hello world';JSONP.get({
url: 'https://rawgit.com/aui/jsonp-sandbox/master/test/xss.js',
value: 'jsonp_callback',
success: function (data) {
console.log(data);
},
error: function(errors) {
console.error(errors);
}
});
```
## 环境测试IE5+、Edge、Chrome、Firefox、Safari