[英]How to prevent hacking if users change html/javascript variables on client side?
[英]In client side javascript, how can change my variables based on environment?
好的,所以我使用的是node.js,非常棒。
我一直在本地工作,直到最近,我有點沮喪,我每次只是為了部署而改變我的代碼。
具體來說我使用套接字io,我需要告訴套接字它所在的位置:
var _socket = io.connect('http://localhost:5000');
當我去本地時,這很好,但每次我部署到我的測試服務器時我都需要更改它...這很煩人。 在其他語言中,我可以通過配置文件來完成此操作。
在節點中,在服務器端,我可以根據我的環境設置變量,如此...
app.configure('development', function(){
process.env.PORT = 5000;
});
我可以在客戶端做類似的事情嗎?
您必須以某種方式將此變量嵌入到客戶端HTML代碼中(即在Jade模板中)。
如果您顯示服務器端代碼提供HTML,我可能能夠確定它可能位於何處。
我經常做這樣的事情:
(function(){
var config = {
host: 'localhost',
port: '8080',
setEnv: function(env){
switch (env){
case 'development':
this.host = 'devserver';
this.port = '80';
break;
case 'production':
this.host = 'prodserver';
this.port = '80';
break;
}
}
};
console.log(config.host);
console.log(config.port);
config.setEnv('production');
console.log(config.host);
console.log(config.port);
})();
如果使用grunt構建應用程序,請使用grunt-variablize 。 將您的配置放入resources/config.json
{
"test": {
"socketUrl": "http://localhost:5000"
},
"prod": {
"socketUrl": "http://your-production.com:5000"
}
}
配置變量任務:
grunt.initConfig({
/* ... */
variablize: {
target: {
input: "resources/config.json",
output: "dist/config.js",
variable: "Config",
property: grunt.option('profile')
}
}
});
運行grunt --profile=test
或grunt --profile=prod
並以這種方式使用它:
var _socket = io.connect(Config.socketUrl);
這取決於您在節點方面的管理方式。 就像你有每個env不同的配置文件。 例如。 production.js,development.js等。然后你可以在該配置中定義url或設置一個env。 設置此基本URL或環境。 進入服務器端的HTML模板並進行渲染。 在客戶端,您可以輕松閱讀環境。 或基本網址。 在我的情況下,我根據環境設置了網址。 我在配置文件中定義了環境,並在客戶端創建了配置文件。 所以那基於env。 配置文件可以設置URL。
angular.module('core').constant('config',{
'apiUrl' :{
'beta': 'http://api-beta.xyzdev.com',
'dev': 'http://api-dev.xyzdev.com',
'production': 'http://api-prod.xyzdev.com'
}
});
在客戶端,這應該足夠了:
var _socket = io.connect();
socket.io將自動檢測主機和端口。
編輯
如果網址與地址和端口匹配,您還可以執行以下操作:
var _socket = io.connect(document.location.protocol+'//'+document.location.host);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.