【发布时间】:2013-02-21 19:26:06
【问题描述】:
我正在尝试构建一个身份验证系统并且我有 app.js
var express = require('express')
, MemoryStore = require('express').session.MemoryStore
, app = express();
app.use(express.cookieParser());
app.use(express.session({ secret: 'keyboard cat', store: new MemoryStore({ reapInterval: 60000 * 10 })}));
app.use(app.router);
和 route.index 一样
var express = require('express')
, mysql = require('mysql')
, crypto = require('crypto')
, app = module.exports = express();
app.get('/*',function(req,res){
var url = req.url.split('/');
if (url[1] == 'favicon.ico')
return;
if (!req.session.user) {
if (url.length == 4 && url[1] == 'login') {
var connection = mysql.createConnection({
host : 'localhost',
user : 'user',
password : 'pass',
});
var result = null;
connection.connect();
connection.query('use database');
var word = url[3];
var password = crypto.createHash('md5').update(word).digest("hex");
connection.query('SELECT id,level FROM users WHERE email = "'+url[2]+'" AND password = "'+password+'"', function(err, rows, fields) {
if (err) throw err;
for (i in rows) {
result = rows[i].level;
}
req.session.user = result;
});
connection.end();
}
}
console.log(req.session.user)
当我第一次访问 http://mydomain.com/login/user/pass 时,它会显示在最后一次控制台调用中,但第二次访问时 cookie 是干净的
【问题讨论】:
-
在你做任何事情之前,请阅读proper SQL escaping。你在这里做的事情是非常危险的。您不能将任意用户提供的数据插入到查询字符串中。您应该始终使用安全的占位符,例如
?来表示转义的内容。 -
是的,在了解 cookie 和会话的工作原理后,我将设法防止 sql 注入,但现在我专注于了解会话和 cookie。谢谢链接。
-
我只是希望你在弄明白之前不要将这段代码推广到公共互联网上。