使用nginx代理https网站,并注入自己js的方法

最近遇到一个变态的问题,客户要我们做的网站收集到的数据直接上传到他们上级的一个数据汇总系统,但是上级系统已经运行了很多年,貌似没有再进行二次开发的可能了,并且别人的系统也不一定给我们对接,那么有什么办法能把我们的数据直接在用户提交表单的时候直接就同步到上级系统里去么?

经过我多次实验,发现了一种简单可行的方式: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保证不被注入。

2、由于本地代理了所有的请求,所以如果并发比较大的情况不适合这种方式,或者你自己弄个牛逼的机器也是ok的

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
您可以使用Nginx作为反向代理,将请求转发到Harbor的后端,并通过启用HTTPS来安全访问Harbor。以下是一个示例配置: 首先,确保您已经安装了Nginx,并且已经生成了有效的SSL证书。 1. 打开Nginx的配置文件(通常在`/etc/nginx/nginx.conf`或`/etc/nginx/conf.d/default.conf`)。 2. 在`http`块中添加以下配置,用于设置反向代理HTTPS访问: ``` server { listen 80; server_name your_domain.com; location / { proxy_pass http://harbor_backend_ip:harbor_backend_port; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } } server { listen 443 ssl; server_name your_domain.com; ssl_certificate /path/to/ssl_certificate.crt; ssl_certificate_key /path/to/ssl_certificate.key; location / { proxy_pass http://harbor_backend_ip:harbor_backend_port; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } } ``` 请确保将`your_domain.com`替换为您的域名,并将`harbor_backend_ip`和`harbor_backend_port`替换为Harbor后端实际的IP地址和端口。 3. 将您的SSL证书和私钥文件路径替换为正确的路径。 4. 保存并关闭配置文件。 5. 重新加载Nginx配置以使更改生效: ``` sudo systemctl reload nginx ``` 现在,您应该能够通过`https://your_domain.com`访问Harbor,并且Nginx会将请求代理到Harbor后端。请确保在防火墙中打开相应的端口(80和443)以允许流量通过。 希望这可以帮助到您!如有任何问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

灿宝宝lo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值