聊聊electron代码加密
electron技术就是基于开源的
chromium
内核,实现了跨端的桌面端开发框架,所以其常用的业务开发脚本就是js代码了那么在打包后,这些js代码虽然会经过压缩混淆编译等处理,但是仍然可以破解出来
所以就需要一种技术,把js代码转成二进制文件
如果可以的话,还需要对这些文件进行加密,绑定本地机器的mac地址,保证了激活唯一性
接下来,将聊聊怎么做这些事情
bytenode
通过bytenode
将所有的js文件编译为字节码
1 | const bytenode = window.require('bytenode'); |
webpack插件
用来修改按需加载资源的方式,不再加载js资源了
1 | const pluginName = 'ChangeEntryWebpackPlugin'; |
步骤
- 先将前端单页项目,通过webpack编译后,生成js文件
- 启动供编译jsc的electron,在该electron里面,将上一步生成的js文件,编译为jsc的字节码文件。在electron里面编译的目的,是要保证版本一致性,因为该jsc文件,最终也会打包到最后的electron的产物里面
- 最后执行需要生成最终包的electron脚本
- 运行时加载方式伪代码
1 | // 这里使用的是基于award框架的项目示例 |
跨域漫谈
这里主要描述跨域的一些细节
set-cookie
浏览器在请求一个设置 session 的接口,如果和当前域名不一致,则出现上述这种情况
比如当前浏览器访问地址:http://www.example.com
如果请求接口:http://www.test.com/api
,那么就会出现上述提示,这种提示就表明了该接口下的 cookie 没有正常写入,即 cookie 写入失败
解决方案: - session 配置设置如下go session.Options(sessions.Options{MaxAge: 3600 * 12, Path: "/", HttpOnly: true, SameSite: http.SameSiteNoneMode, Secure: true})
- 请求接口使用https
即访问地址:https://www.test.com/api
,那么 cookie 就可以正常写入了
但是内部系统,往往没有使用 https,如果还需要这种情况进行 cookie 写入,就可以考虑自动提交 form 表单
1 | // form提交js代码说明 |
这样,cookie 就正常在www.test.com
这个域名下写入了,这个时候别忘了加个回调地址,再重定向回原来访问的页面
已经注入 cookie,跨域请求时,cookie 协带说明
通常,我们使用 fetch 函数请求接口,服务端解除跨域限制且支持 cookie 接收,一般这样设置
前端
1 | fetch("http://www.test.com/api/list", { |
后端
1 | // c表示 *gin.Context |
但是注意,这个时候,你的 cookie 并没有带到后端,因为浏览器访问的地址是
http://www.example.com
,但是请求的接口是http://www.test.com/api/list
,也就说,
http://www.test.com/api/
这里的 cookie 写入,肯定是在.test.com
这个域名下的,而由于当前访问的域名是.example.com
,这个时候 cookie 就没有办法带过去只有请求这种地址的跨域是可以的
http://api.example.com/list
dockerfile编写细节
编译 + 部署
通常我们需要在一个指定的目标环境进行代码的编译,比如
nodejs12
、golang:1.15
等环境那么我们就可以编写 dockerfile 来实现
前提:一个 dockerfile 有且只有一个基础镜像,比如在生产环境运行时,其实不需要大而全的 nodejs 包,只需要一个小而美的即可
1 |
|
动态的dockerfile
示例
1 | # 声明获取docker build时的动态传参 |
通过该dockerfile,制作最终的镜像命令
1 | version=1.0.0 |