Skip to content

Commit

Permalink
1、屏蔽 content-security-policy功能,新增4个屏蔽选项;2、新增 移除CSP的请求地址 githubusercon…
Browse files Browse the repository at this point in the history
…tent.com;3、test 环境 新增功能;4、test 环境新增 PJAX报错解决办法 (#93)

* add func remove CSP

* 新增参考文档

* 添加测试用例

* 添加替换地址为指定服务地址功能,用于查看chromium源码

* add docker run nginx server

* 补上80端口配置

* add opensource.goole url

* add cs.opensource.google  url

* 使用自己架设的 nginx服务地址替换CDN地址

* change CSP variable name

* 添加固定替换CDN地址方法

* 替换指定数目的域名

* 添加测试用例

* 优化nginx 配置

* 优化nginx 配置二

* 优化nginx 配置三

* 优化nginx 配置增加简单权限验证阻止滥用

* 优化nginx 配置五

* 添加测试演示用例

* 添加测试演示用例

* 修改动态地址替换注释

* 修改错误的单词

* 移除与扩展无关的server文件

* 去除普通用户无关的测试脚本以及服务端搭建脚本

* 修改maxcdn.bootstrapcdn.com替换地址

* 替换code.jquery.com 为 ajax.aspnetcdn.com

* code.jquery.com 地址替换

* 1、增加域名替换白名单机制;2、两种地址替换方法,依靠优先级混合使用;3新增code.jquery.com域名下jquery 替换

* delete ytb

* 新增高级玩法

* 新增test service-worker

* change changelog

* add replace jquery-ui

* test sw.js

* 增加cdnjs.cloudflare.com替换为cdnjs.loli.net

* add opensource.google url replace

* remove githubusercontent.com content-security-policy

* 新增CSP 4个屏蔽选项

* 解决冲突

* 解决冲突

* 解决冲突

* 解决冲突

* add docker run nginx server

* 补上80端口配置

* 解决冲突4

* 新增新增  替换规则 ,默认未启用

* remove manifesst rule ruleset_cdn_cloudflare_1

* 修改注释

* change test enviroment README.md
  • Loading branch information
jingjingxyk authored May 30, 2022
1 parent fa24a3e commit 8ee36bb
Show file tree
Hide file tree
Showing 17 changed files with 476 additions and 153 deletions.
6 changes: 2 additions & 4 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,9 @@ extension.zip
.idea/
.DS_Store
Thumbs.db
server/nginx.conf
server/conf.d
server/tls/*
!server/tls/.gitkeep
server/
server/*
extension/_metadata/
extension/test/extension-v3-test/_metadata/
extension/test/chromium-tools/

24 changes: 18 additions & 6 deletions CHANGELOG-0.10.x.md
Original file line number Diff line number Diff line change
@@ -1,15 +1,27 @@
# CHANGELOG

## [一个完整的 测试例子 请看 `extension/test/extension-v3-test` 目录](https://github.com/justjavac/ReplaceGoogleCDN/tree/master/extension/test/extension-v3-test)

## CHANGELOG for 0.10.3
### 变更
>1. 新增 公共 CDN 静态资源库 中科大 `rules/README.md`
>2. 修改屏蔽 `content-security-policy`功能,新增4个屏蔽选项 ` ["cross-origin-embedder-policy", "cross-origin-opener-policy", "cross-origin-opener-policy-report-only","cross-origin-embedder-policy-report-only"]`
>3. 新增 移除`CSP`的请求地址 `githubusercontent.com`
>4. 新增 `cdnjs.cloudflare.com` 替换规则 `rules-cdnjs-cloudflare-com-redirect.json`,默认未启用
>5. test 环境 修改功能: github.com 地址替换后 PAJX 报错, 添加解决方案 `extension/test/extension-v3-test/js/content-scripts/github.js`
>6. test 环境 新增功能: 自定义规则第一版雏形 `extension/test/extension-v3-test/index.html`


## CHANGELOG for 0.10.2
### 变更
>1. 新增test service-worker `sw.js` 小工具,解决因域名地址替换导致出现的问题;比如 github PJAX 错误
>2. 新增test service-worker `sw.js` 小工具中 `self-define-browser-editor.js` 浏览器当作记事本使用
>3. 新增test service-worker `sw.js` 小工具中 `tools/myscript-tools.js` 开启"上帝"模式,可编辑网页
>4. 新增test service-worker `sw.js` 小工具中 `tools/myscript-tools.js` 查看网页引入的所有域名
>1. test 环境 新增功能: service-worker `sw.js` 小工具,解决因域名地址替换导致出现的问题;比如 github PJAX 错误
>2. test 环境 新增功能: service-worker `sw.js` 小工具中 `extension/test/extension-v3-test/js/tools/self-define-browser-editor.js` 浏览器当作记事本使用
>3. test 环境 新增功能: service-worker `sw.js` 小工具中 `extension/test/extension-v3-test/js/tools/myscript-tools.js` 开启"上帝"模式,可编辑网页
>4. test 环境 新增功能: service-worker `sw.js` 小工具中 `extension/test/extension-v3-test/js/tools/myscript-tools.js` 查看网页引入的所有域名
>5. 新增 `code.query.com` jquery 地址替换
>6. 解决 0.10.1 版本中 `第10,11条不能共用问题`
>7. 删除 0.10.1 版本中 高级玩法excludedInitiatorDomains错误配置 位于 `rules/rules_advance_redirect_2.json : "excludedInitiatorDomains":[] `
>6. 解决 0.10.1 版本中 `第9 , 10条不能共用问题`
>7. 删除 0.10.1 版本中 高级玩法 `excludedInitiatorDomains`错误配置 位于 `rules/rules_advance_redirect_2.json : "excludedInitiatorDomains":[] `
>8. maxcdn.bootstrapcdn.com 替换为 lib.baomitu.com

Expand Down
3 changes: 3 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -71,3 +71,6 @@ Chrome 安装方法(Google 被墙了上不去):
> 3. 勾选 Developer Mode
> 4. 选择 Load unpacked extension... 然后定位到刚才解压的文件夹里面的 extension 目录,确定
> 5. 这就安装好了,去掉 Developer Mode 勾选。

## [功能变更记录 CHANGELOG-0.10.x](CHANGELOG-0.10.x.md)
58 changes: 40 additions & 18 deletions extension/js/background.js
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ function hasCSP(headers = []) {
* 响应头里CSP相关的选项
* @type {string[]}
*/

const remove_csp_item=[
'content-security-policy',
'content-security-policy-report-only',
Expand All @@ -32,8 +33,13 @@ const remove_csp_item=[
'x-content-type-options',
'x-frame-options',
'permissions-policy',
'timing-allow-origin'
'timing-allow-origin',
"cross-origin-embedder-policy",
"cross-origin-opener-policy",
"cross-origin-opener-policy-report-only",
"cross-origin-embedder-policy-report-only"
];

/**
* 需要移除CSP的URL
* @type {string[]}
Expand All @@ -52,8 +58,10 @@ const remove_cps_urls=[
'*://stackoverflow.com/*',
'*://translate.googleapis.com/*',
"*://developers.redhat.com/*",
// "*://cloud-soft.xieyaokun.com/*"
"*://githubusercontent.com/*",

]

/**
* 移除CSP
* 参考文档:
Expand All @@ -77,17 +85,17 @@ chrome.webRequest.onHeadersReceived.addListener(
},
{
// urls: ["<all_urls>"],
//需要移除CSP自己添加url
urls: [
...remove_cps_urls
...remove_cps_urls,//需要移除CSP自己添加url
],
types: ["main_frame", "sub_frame", "stylesheet", "script", "image", "font", "object", "xmlhttprequest", "ping", "csp_report", "media", "websocket", "other"]
},
["blocking", 'responseHeaders']
);


//Open Source urls
let opensource_goole_urls=[
let opensource_google_urls=[
"*://*.chromium.org/*", //Chromium ChromiumOS GN
"*://*.googlesource.com/*", //Chromium
"*://summerofcode.withgoogle.com/*",
Expand All @@ -96,16 +104,18 @@ let opensource_goole_urls=[
"https://opensource.google/*",
]


// 测试域名组
let test_urls=[
...opensource_goole_urls, //数组
...opensource_google_urls, //数组
"*://*.google.com/*", //测试域名
"*://github.com/*", //测试域名
]

/**
* 使用自己架设的 nginx服务,替换CDN地址
*
* 容器运行 nginx 脚本位于 server 目录
* 备注: domain.com 请更换为自己的域名
*
* 测试案例 查看chromium 源码
Expand All @@ -114,28 +124,36 @@ let test_urls=[
* https://chromium.googlesource.com/
* https://source.chromium.org/chromium
* https://cs.opensource.google/
* @param details
* @param proxy_provider # 请更换为自己的域名
* @returns {string}
*
*/
let use_nginx_proxy = (details, proxy_provider) => {


let use_nginx_proxy=(details,proxy_provider)=>{

// 主要是和 nginx 配合使用
let url = details.url.replace('http://', 'https://')
// 代理服务提供者 需要支持泛域名
// let proxy_provider = '.proxy.domain.com'
let middle_builder = new URL(url);
// 中文域名编码转换 punycode标准编码: punycode('点')= 'xn--3px'

// 中文域名编码转换 punycode标准编码: punycode('点') = 'xn--3px'
//替换点. 为了正则表达式好区分 _xn--3px_仅仅是分隔符号,可以自己定义分隔符号

let host = middle_builder.host.replace(/\./g, '_xn--3px_');
//计算符号点的个数
let dot_nums = middle_builder.host.match(/\./g).length
let query_string = middle_builder.pathname + middle_builder.search

return "https://" + dot_nums + '_' + host + proxy_provider + query_string;
}

// 你的支持泛解析的域名
let suffix_domain = '.proxy.domain.com'

// 指定匹配域名
let need_replace_cdn_urls = [
'ajax.googleapis.com',
Expand Down Expand Up @@ -175,28 +193,32 @@ chrome.webRequest.onBeforeRequest.addListener(
// return details.url;
// }




/*
// 方法一: 支持特定域名替换
// 测试例子:打开 https://github.com (仅用于学习技术)
// https://github-com.proxy.xiaoshuogeng.com/
/*
let des_url;
if ((des_url = replace_cdn_urls(details))) {
return {redirectUrl: des_url};
}
*/


*/
/*
// 方法二: 使用nginx架设的服务动态地址替换
// 测试例子:打开 https://www.google.com (仅用于学习技术)
// https://2_www_xn--3px_google_xn--3px_com.proxy.xiaoshuogeng.com/
return {redirectUrl: use_nginx_proxy(details,suffix_domain)};
// 方法二: 使用nginx架设的服务动态地址替换
// 测试例子:打开 https://ww.google.com (仅用于学习技术)
// https://2_www_xn--3px_google_xn--3px_com.proxy.xiaoshuogeng.com/
/*
*/

return {redirectUrl: use_nginx_proxy(details,suffix_domain)};

*/

let url = details.url.replace("http://", "https://");
url = url.replace("ajax.googleapis.com", "ajax.loli.net");
Expand Down Expand Up @@ -227,7 +249,7 @@ chrome.webRequest.onBeforeRequest.addListener(
"*://secure.gravatar.com/*",
"*://www.gravatar.com/*",
"*://maxcdn.bootstrapcdn.com/bootstrap/*",
// ...test_urls // 测试用例
// ...test_urls // 测试用例

],
},
Expand Down
50 changes: 32 additions & 18 deletions extension/rules/README.md
Original file line number Diff line number Diff line change
@@ -1,32 +1,42 @@
# manifest.json declarative_net_reques 配置示例

## 网络拨测工具 测试 公共 CDN 静态资源库 区域可用性
## 网络拨测工具 (测试 公共 CDN 静态资源库 区域可用性)
1. [网络拨测工具](https://zijian.aliyun.com/detect/http)
2. [网站诊断分析工具](https://zijian.aliyun.com/)


## 公共 CDN 静态资源库
1. [前端 CDNJS 库及 Google Fonts、Ajax 和 Gravatar 国内加速服务 http://css.loli.net](https://u.sb/css-cdn/)
2. [360 奇舞团](https://cdn.baomitu.com/)
3. [又拍云](http://jscdn.upai.com/)
4. [BootCDN](https://www.bootcdn.cn/)
5. [字节跳动静态资源公共库](http://cdn.bytedance.com/)
6. [Microsoft Ajax Content Delivery Network](https://docs.microsoft.com/en-us/aspnet/ajax/cdn/overview)
7. [jsdelivr](https://www.jsdelivr.com/)
8. [unpkg](https://unpkg.com/)
9. [cloudflare ](https://cdnjs.com/)
10. [google libraries](https://developers.google.com/speed/libraries)
11. [中科大反向代理列表如下:](https://mirrors.ustc.edu.cn/)

```text
ajax.googleapis.com
ajax.proxy.ustclug.org
themes.googleusercontent.com
google-themes.proxy.ustclug.org
1. [360 奇舞团](https://cdn.baomitu.com/)
2. [又拍云](http://jscdn.upai.com/)
3. [BootCDN](https://www.bootcdn.cn/)
4. [字节跳动静态资源公共库](http://cdn.bytedance.com/)
5. [Microsoft Ajax Content Delivery Network](https://docs.microsoft.com/en-us/aspnet/ajax/cdn/overview)
6. [jsdelivr](https://www.jsdelivr.com/)
7. [unpkg](https://unpkg.com/)
8. [cloudflare ](https://cdnjs.com/)
9. [google libraries](https://developers.google.com/speed/libraries)


```

## 高级玩法
> 使用时,请把 proxy.domain.com 更换为你自己的域名
> 使用时,请把 `proxy.domain.com` 更换为你自己的域名
> 固定地址替换 `rules_advance_redirect_1.json`
> 固定地址替换 rules_advance_redirect_1.json
> 动态地址替换 `rules_advance_redirect_2.json`
> 动态地址替换 rules_advance_redirect_2.json
> 移除CSP `rules_remove_header_1.json`
> 移除CSP rules_remove_header_1.json
> 阻止请求 `rules_block_1.json`

## manifeset.json 参考 declarative_net_request 配置
Expand All @@ -48,14 +58,18 @@
"enabled": true,
"path": "rules/rules_block_1.json"
},
{
"id": "ruleset_advance_redirect_1",
"enabled": true,
"path": "rules/rules_advance_redirect_1.json"
}
{
"id": "ruleset_advance_redirect_2",
"enabled": true,
"path": "rules/rules_advance_redirect_2.json"
}
]
},

}
```

### 指定匹配域名
Expand Down
20 changes: 20 additions & 0 deletions extension/rules/rules-cdnjs-cloudflare-com-redirect.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
[
{
"id": 1,
"priority": 1,
"action": {
"type": "redirect",
"redirect": {
"transform": { "scheme": "https", "host": "cdnjs.loli.net" }
}
},
"condition": {
"urlFilter": "cdnjs.cloudflare.com/ajax/libs",
"resourceTypes": [
"main_frame", "sub_frame", "stylesheet", "script", "image", "font",
"object", "xmlhttprequest", "ping", "csp_report", "media", "websocket",
"webtransport", "webbundle", "other"
]
}
}
]
11 changes: 8 additions & 3 deletions extension/rules/rules_remove_header_1.json
Original file line number Diff line number Diff line change
Expand Up @@ -16,12 +16,16 @@
{"header":"x-content-type-options","operation":"remove"},
{"header":"x-frame-options","operation":"remove"},
{"header":"permissions-policy","operation":"remove"},
{"header":"timing-allow-origin","operation":"remove"}
{"header":"timing-allow-origin","operation":"remove"},
{"header":"cross-origin-embedder-policy","operation":"remove"},
{"header":"cross-origin-opener-policy","operation":"remove"},
{"header":"cross-origin-opener-policy-report-only","operation":"remove"},
{"header":"cross-origin-embedder-policy-report-only","operation":"remove"}
]
},
"condition": {
"isUrlFilter" : false,
"urlFilter": "*.com",
"urlFilter": "*",
"requestDomains":[
"ajax.googleapis.com",
"fonts.googleapis.com",
Expand All @@ -31,7 +35,8 @@
"www.gstatic.com",
"secure.gravatar.com",
"www.gravatar.com",
"maxcdn.bootstrapcdn.com"
"maxcdn.bootstrapcdn.com",
"githubusercontent.com"
],
"resourceTypes": [
"main_frame", "sub_frame", "stylesheet", "script", "image", "font",
Expand Down
Loading

0 comments on commit 8ee36bb

Please sign in to comment.