我该怎么保护这台枪服务器?我只想从一个域与多个子域的流量。
在我的用例中,我在iPad上为孩子们做了一个游戏。当他们第一次玩的时候--我意识到如果能把一些游戏控件移到他们的手机上会更好。所以他们同时使用ipad和手机来控制游戏。效果很好。数据通过枪在设备间同步。然而,存在着安全问题。任何人都可以利用我的枪服务器实时共享设备之间的状态。我想把它限制在我的应用程序上
const ARGS = process.argv.slice(2);
var fs = require('fs');
var protocol = ARGS[0];
var port = ARGS[1];
var express = require('express');
var cors = require('cors')
var Gun = require('gun');
require('gun/axe');
var app = express();
var allowedOrigins = [
'localhost:8080',
];
app.use(cors({
origin: function (origin, callback) {
// allow requests with no origin
// (like mobile apps or curl requests)
// if (!origin) return callback(null, true);
if (allowedOrigins.indexOf(origin) === -1) {
var msg = 'The CORS policy for this site does not ' +
'allow access from the specified Origin.';
return callback(new Error(msg), false);
}
return callback(null, true);
}
}));
app.use(Gun.serve);
app.use(express.static('/gun'));
server = require(protocol);
if (protocol == 'https') {
var privateKey = fs.readFileSync('../json-data.ssl/key.pem', 'utf8');
var certificate = fs.readFileSync('../json-data.ssl/cert.pem', 'utf8');
var credentials = {key: privateKey, cert: certificate};
var server = server.createServer(credentials, app);
} else {
var server = server.createServer(app);
}
server.listen(port, () => {
console.log('listening on *:'.concat(port));
});
var gunDev = Gun({web: server, file: 'testingDB'});发布于 2022-01-15 06:17:19
步骤1-创建cors.js文件
const cors = require('cors');
const whitelist = ['localhost:8080'];
const corsOptions = (req, callback) => {
let options = {
origin: whitelist.includes(req.header('Origin') ? true : false;
}
callback(null, options);
};
exports.corsWithOptions = cors(corsOptions);步骤2-导入和应用corsWithOptions
const { corsWithOptions } = require('./cors');
...
app.use('/*', corsWithOptions, (req, res) => { res.sendStatus(200); })
app.use(Gun.serve);
app.use(express.static('/gun'));发布于 2022-01-15 05:43:18
默认情况下,互联网上的web服务器对任何有编程技能的人都是开放的。
CORs保护只适用于在网页中运行的Javascript。CORs保护本身是在浏览器中实现的,当任何类型的代码运行在浏览器之外(任何简单脚本)时,根本就没有CORs保护。因此,CORs实际上不适用于除浏览器之外的任何其他类型的客户端。
因此,为了保护您的服务器不被公众访问,您有以下几种选择:
对于您特定的游戏用途,只有当您限制对家庭网络的使用,并要求这两种设备都在家庭WiFi上,而不是在蜂窝网络上时,#1才有可能。
对于你使用的,#2可能是不可行的。
所以,这意味着#3可能是最有意义的。如果这是一次性部署,则可以使用安全令牌手动配置每个客户端,并将这些令牌手动添加到服务器上的某些配置存储(如JSON文件)中。如果你想让更多其他游戏用户可以使用的更可伸缩的系统,那么你必须开发某种系统来注册合法的客户,给他们颁发凭证,并将这些凭证存储在客户端中。因为你的客户可能成对,需要“连接”,你将不得不在你的证书发放过程中烘焙。
https://stackoverflow.com/questions/70718731
复制相似问题