Permalink
Browse files

CSRF絡みの登録処理の不具合を修正

  • Loading branch information...
1 parent 60ef5ec commit e2903e5e245c87f57e84287bbb109ed9e755f22c @nsyee nsyee committed Nov 12, 2012
View
20 app.js
@@ -77,30 +77,30 @@ app.configure(function() {
app.use(express.session({
key: 'sess_id',
cookie: {
- maxAge: config.server.cookieMaxAge, // 1week
+ maxAge: config.server.cookieMaxAge,
secure: true
},
store: sessionStore
}));
app.use(flash());
app.use(passport.initialize());
app.use(passport.session());
+ // SSL通信を強制
app.use(middleware.ssl);
+ // セッションデータをejsからアクセスできるように設定
app.use(middleware.sessionData);
+ // 環境変数をejsからアクセスできるように設定
app.use(middleware.envData);
+ // 設定ファイルをejsからアクセスできるように設定
app.use(middleware.configData);
+ app.use(express.compress());
+ app.use(express.csrf()); // この位置じゃないと動かない?順番要注意
// 静的ファイルの配信設定
- // ※404ページを表示させることができないのでstモジュールの利用一時停止
- // app.use(st({
- // path: path.join(__dirname, 'public'),
- // url: '/'
- // }));
+ app.use(express.static(path.join(__dirname, 'public')));
// app.routerを設定すると、通信の実行までに必要なマッピング処理を省略できる
// ルーティングの機能を提供する。これはExpressでの拡張
- app.use(express.compress());
- app.use(express.static(path.join(__dirname, 'public')));
app.use(app.router);
- app.use(express.csrf()); // この位置じゃないと動かない?順番要注意
+ // エラー処理をハンドリングするミドルウェア
app.use(middleware.notFound);
app.use(middleware.unauthorized);
app.use(middleware.error);
@@ -240,7 +240,7 @@ function authenticated(req, res, next) {
//CSRF対策用トークンを設定
function csrf(req, res, next) {
- res.locals.token = req.session._csrf;
+ res.locals._csrf = req.session._csrf;
next();
}
@@ -119,7 +119,7 @@ exports.create = function(req, res, next) {
//CSRF Check
- if (_csrf !== req.param('token')) {
+ if (_csrf !== req.param('_csrf')) {
logger.error('CSRF Invalid');
return next(new Error());
}
@@ -292,7 +292,7 @@ exports.delete = function(req, res, next) {
var _csrf = req.session._csrf;
//CSRF Check
- if (_csrf !== req.param('token')) {
+ if (_csrf !== req.param('_csrf')) {
logger.error('CSRF Invalid');
return next(new Error());
}
@@ -50,7 +50,7 @@ exports.deactivation = function(req, res, next) {
var _csrf = req.session._csrf;
//CSRF Check
- if (_csrf !== req.param('token')) {
+ if (_csrf !== req.param('_csrf')) {
logger.error('CSRF Invalid');
return next(new Error());
}
@@ -69,7 +69,7 @@ exports.onConnection = function(socket) {
if (!user) { return; }
//CSRF Check
- if (_csrf && _csrf !== data.token) {
+ if (_csrf && _csrf !== data._csrf) {
logger.error('CSRF Invalid');
return;
}
View
@@ -21,9 +21,10 @@ exports.create = function(req, res, next) {
var isUpdate = req.param('isUpdate');
var _csrf = req.session._csrf;
+ logger.info('#####create');
//CSRF Check
- if (_csrf !== req.param('token')) {
+ if (_csrf !== req.param('_csrf')) {
logger.error('CSRF Invalid');
return next(new Error());
}
View
@@ -3,7 +3,7 @@ var utils = require('../utils');
var config = require('config');
-//SSL通信を強制
+// SSL通信を強制するミドルウェア
exports.ssl = function(req, res, next) {
if (!req.secure) {
var host = config.server.host;
@@ -23,6 +23,7 @@ exports.ssl = function(req, res, next) {
};
+// セッションデータをejsからアクセスできるように設定
exports.sessionData = function(req, res, next) {
var logger = app.set('logger');
@@ -35,19 +36,24 @@ exports.sessionData = function(req, res, next) {
next();
};
+
+// 環境変数をejsからアクセスできるように設定
exports.envData = function(req, res, next) {
var logger = app.set('logger');
app.locals.env = app.settings.env;
app.locals.isProduction = app.settings.env === 'production';
next();
};
+
+// 設定ファイルをejsからアクセスできるように設定
exports.configData = function(req, res, next) {
var logger = app.set('logger');
app.locals.config = config;
next();
};
+//404 Not Foundをハンドリングするミドルウェア
exports.notFound = function(err, req, res, next) {
var logger = app.set('logger');
@@ -65,6 +71,7 @@ exports.notFound = function(err, req, res, next) {
}
};
+//401 Unauthorizedをハンドリングするミドルウェア
exports.unauthorized = function(err, req, res, next) {
var logger = app.set('logger');
@@ -82,6 +89,7 @@ exports.unauthorized = function(err, req, res, next) {
}
};
+//システムエラーなどその他のエラーをハンドリングするミドルウェア
exports.error = function(err, req, res, next) {
var logger = app.set('logger');
View
@@ -2,12 +2,14 @@ var app = require('../../app');
var util = require('util');
+//改行コードをbrタグに変換
exports.nl2br = function(str) {
if (str) {
return str.replace(/\n/g, '<br/>');
}
};
+//HTMLエスケープ処理
exports.escHtml = function(str) {
if (str) {
str = str.replace(/&/g, '&amp;');
View
@@ -9,6 +9,7 @@ var Mail = function() {
};
+// 共通メール送信処理
Mail.prototype.send = function(params) {
var mailServer = app.set('mailServer');
var logger = app.set('logger');
@@ -30,6 +31,7 @@ Mail.prototype.send = function(params) {
});
};
+// 入会時のメール送信
Mail.prototype.sendWelcomeMail = function(userName, to) {
var template = __dirname+'/../../views/mail/welcome.ejs';
var subject = config.mail.subject.welcome;
@@ -46,6 +48,7 @@ Mail.prototype.sendWelcomeMail = function(userName, to) {
});
};
+// 退会時のメール送信
Mail.prototype.sendDeactivationMail = function(userName, to) {
var template = __dirname+'/../../views/mail/deactivation.ejs';
var subject = config.mail.subject.deactivation;
@@ -62,6 +65,7 @@ Mail.prototype.sendDeactivationMail = function(userName, to) {
});
};
+// プロフィール更新時のメール送信
Mail.prototype.sendProfileMail = function(userName, to) {
var template = __dirname+'/../../views/mail/profile.ejs';
var subject = config.mail.subject.profile;
@@ -101,7 +101,7 @@
initialize: function() {
this.collection = new syaberi.Chats;
this.uploadCancelFlg = 0;
- this.token = $('#token').val(); //for CSRF
+ this._csrf = $('#_csrf').val(); //for CSRF
},
submit: function(event) {
var message = $.trim($('#message1').val());
@@ -122,7 +122,7 @@
message: message,
type: CHAT_COMMENT,
isUrlOpen: isUrlOpen,
- token: this.token
+ _csrf: this._csrf
});
this.clearInputUserMessage();
@@ -153,7 +153,7 @@
chatroomId: chatroomId,
chatId: chatId,
userId: userId,
- token: this.token
+ _csrf: this._csrf
});
}
},
Oops, something went wrong.
Oops, something went wrong.

0 comments on commit e2903e5

Please sign in to comment.