最近遇到一个变态的问题,客户要我们做的网站收集到的数据直接上传到他们上级的一个数据汇总系统,但是上级系统已经运行了很多年,貌似没有再进行二次开发的可能了,并且别人的系统也不一定给我们对接,那么有什么办法能把我们的数据直接在用户提交表单的时候直接就同步到上级系统里去么?
经过我多次实验,发现了一种简单可行的方式:nginx代理+js注入
由于对方系统使用了https,所以nginx代理后要将响应进行解压后再注入js。
nginx配置如下
server {
listen 80;
listen [::]:80;
server_name mytestweb.cn;
location / {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;//这两句是透传客户端ip,防止被代理服务器把我们的服务器ip拉黑
proxy_set_header Accept-Encoding '';#禁用压缩,这一句必须写,否则注入失败
#这里是注入自己js的方法
sub_filter '</head>' '<script charset="utf-8" src="//mytestweb.cn/my.js"></script></head>';
sub_filter_once on; #匹配到第一个就替换,其他不管
proxy_pass https://www.baidu.com;#这里是你要代理的网站
}
}
server { #配置https,为啥要配https,因为http不能调用https资源,现在大部分网站都是https,具体视自己情况而定
listen 443 ssl;
server_name mytestweb.cn;
ssl_certificate ./cert/mytestweb.cn.pem; #这里是ssl key文件存放的绝对路径,根据自己的文件名称和路径来写
ssl_certificate_key ./cert/mytestweb.cn.key; #这里是ssl key文件存放的绝对路径,根据自己的文件名称和路径来写
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
#以上是配置https的,这样保证自己的域名也支持https,https的证书自己去申请
#以下跟上边是一样的,不用改
location / {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;//这两句是透传客户端ip,防止被代理服务器把我们的服务器ip拉黑
proxy_set_header Accept-Encoding '';#禁用压缩,这一句必须写,否则注入失败
sub_filter '</head>' '<script charset="utf-8" src="//mytestweb.cn/my.js"></script></head>';
sub_filter_once on; #匹配到第一个就替换,其他不管
proxy_pass https://www.baidu.com;#这里是你要代理的网站
}
}
my.js写一行弹窗代码
alert("我是注入的js,现在已经执行了!");
nginx -s reload 重启一下nginx
然后测试一下看
成功注入,现在就可以愉快的在自己的js里写代码了。
---------------------------------------------------
注意:
1、这种方式不适合开启了csp的网站,如果你发现自己的网站被js注入了,可以开启csp保证不被注入。文章来源:https://www.toymoban.com/news/detail-573171.html
2、由于本地代理了所有的请求,所以如果并发比较大的情况不适合这种方式,或者你自己弄个牛逼的机器也是ok的文章来源地址https://www.toymoban.com/news/detail-573171.html
到了这里,关于使用nginx代理https网站,并注入自己js的方法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!