我正在使用带有nodejs的express框架开发一个网站,供学校学习网络安全/加密,我想通过Tor网络托管我的网站以获得额外的安全性/乐趣。我的服务器代码使用这些库:
const express = require('express');
const http = require('http');
const WebSocket = require('ws');
const path = require('path');
const helmet = require('helmet');
const crypto = require('crypto');
const rateLimit = require('express-rate-limit');
const fs = require('fs'); // for logging into a file
该网站通过 localhost: 3000 在主机操作系统上完美运行,但是当我在 Linux 发行版中部署时,它很难找到 html 中指定的脚本:
<link rel="stylesheet" type="text/css" href="style1.css"/>
<script type="module" src="script1.js"></script>
在 Tor 开发工具中,我可以看到 Tor 尝试获取我的 script1.js 和 style1.css,但失败了,因为它使用 https 进行调用。即使我硬编码 html 以使用 http 调用洋葱地址。
<scripttype="module"src="http://vhw4esgaun7zckw4kstkrzfhischtxvyefyzitcvtejm6suny7d9l7yd.onion/script1.js"></script>
这就是我启动服务器的方式:
const app = express();
const server = http.createServer(app);
我在启动时收到此错误,我的网站将仅显示没有样式或脚本的 html:
Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at https://vhw4esgaun7zckw4kstkrzfhischtxvyefyzitcvtejm6suny7d9l7yd.onion/script1.js. (Reason: CORS request did not succeed). Status code: (null).
测试时,我在 Tor 浏览器上关闭了 https only 模式,在头盔中,我将 hsts 设置为 False,当我直接访问 http:// vhw4esgaun7zckw4kstkrzfhischtxvyefyzitcvtejm6suny7d9l7yd.onion/script1.js 时,它会正确显示我的代码,没有错误。另一方面,当我访问 https://vhw4esgaun7zckw4kstkrzfhischtxvyefyzitcvtejm6suny7d9l7yd.onion/script1 时,它永远不会加载,因为我没有使用 https。抱歉,如果答案很明显,我对网络开发非常陌生,只是想通过一个项目更好地理解加密和网络安全。欢迎提问!
我尝试使用硬编码的http调用我的静态文件,仍然使用https调用。添加了 cors 模块并允许所有来源错误持续存在。允许我的 csp 中的所有内容使用头盔,错误仍然存在。不知道该做什么。
您应该避免此类错误
const express = require('express');
const cors = require('cors');
const http = require('http');
const app = express();
app.use(cors()); // Enable CORS for all routes
const server = http.createServer(app);
遵循上述顺序。