我在资产控制器中有此代码来获取图像:
function images($path,$image_name)
{
$image = "../assets/images/$path/$image_name";
if (file_exists ($image) && (is_file($image))) {
$name = $image_name;
} else {
}
$file = getimagesize($image);
$filesize = filesize($image);
$time_cache = 360000000000;
$ts = gmdate("D, d M Y H:i:s", time() + $time_cache) . " GMT";
header("Content-Type: {$file['mime']}\n");
header("Content-disposition: inline; filename=\"$name\"\n");
header("Content-Length: $filesize\n");
header("Expires: $ts");
header("Pragma: cache");
header("Cache-Control: max-age=$time_cache");
readfile ($image);
}
Run Code Online (Sandbox Code Playgroud)
我已将 csrf 保护设置为truein,config/config.php file并且每个对图像的请求都带有Set-Cookie标头。因此 csrf-cookie 可以在某些页面上多次设置。这是否值得担心,如果是,是否有办法防止这种情况发生?
我用连接表单上传图片.但如果我使用它,它就不起作用bodyParser().反过来说,如果我不使用bodyParser,我无法上传文件?
我如何让他们一起玩?这是我的配置:
app.configure(function() {
app.register('.html', require('ejs'));
app.set('views', __dirname + '/../views');
app.set('view engine', 'html');
app.use(gzippo.staticGzip(__dirname + '/../public'),{ maxAge: 86400000 });
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(form({
keepExtensions: true,
uploadDir: __dirname + '/../tmp'
}));
app.use(express.cookieParser());
app.use(express.session({
secret: 'test',
cookie: { secure: true },
store: new MySQLSessionStore(client.database, client.user, client.password)
}));
app.use(expressValidator);
app.use(app.router);
app.use(express.csrf());
});
Run Code Online (Sandbox Code Playgroud) 我在expressjs中使用socket.io 3.我想用快速验证器清理传入的消息.我有这个代码:
var expressValidator = require('express-validator')
, sanitize = require('express-validator').sanitize;
socket.on('chat', function (data) {
io.sockets.in('test').emit('chat', {
user: sh.session.user,
message: data.message,
time: new Date()
});
});
Run Code Online (Sandbox Code Playgroud)
我该怎么用sanitize(data.message).xss?因为这不起作用.
我找不到使用express和node.js在mysql中存储会话的好方法.任何人都有一些模块的提示或实现这一目标的方法?
提前致谢
如何在javascript中编写正则表达式,只允许用户编写:
abc.def,abc-def或abc
所以基本上匹配一个只包含字母的模式(只有小写[az])和一个.或-.但不匹配-或.在字符串的开头或结尾或多次(仅一个.或-每个字符串)
所以不容许他们这样做:
..... abc...abc abc.abc.... abc----.... ...abc.abc .abc -abc 等等
有没有办法阻止会话类在从命令行调用时设置cookie并在数据库中添加记录?
我有一些关于登录和会话的问题.我有这个代码:
db查询:
login: function(req,callback) {
var query = 'SELECT id FROM users WHERE email = "' + req.body.email_login + '" AND password = "' + hashlib.sha1(req.body.password_login) + '" LIMIT 1';
client.query(query, callback);
}
Run Code Online (Sandbox Code Playgroud)
路线:
app.post('/login', function(req, res, next) {
users.login(req,function(err, results) {
if (err) {
res.render('index');
} else if (results[0]) {
req.session.userdata = results[0];
req.session.is_logged_in = true;
res.render('site/news');
}
}
}
Run Code Online (Sandbox Code Playgroud)
Auth中间件:
var auth = function (req, res, next) {
if (req.session.userdata && req.session.is_logged_in === true) {
next();
} else …Run Code Online (Sandbox Code Playgroud) 我试图在快递中使用用户名作为路线,以查看他们的个人资料.
app.get('/:username', function (req, res, next) {
users.get_user(req.params.username, function (err, results) {
if(results[0]) {
res.render('/profile', {
title: 'Profile',
userinfo: results[0]
});
} else {
next();
}
});
});
Run Code Online (Sandbox Code Playgroud)
users.get_user是一个从db获取用户的函数.如果找不到用户,则继续下一个路线.我也有很多其他页面,比如/start,/forum等等.这是不够的做法,因为每次通过/:username路径时都会调用db .我的问题是,有更好的方法吗?
我一直在使用connect-mysql-session在MySQL数据库中存储会话,但它不再被维护,并且已经2年没有更新了.
是否还有其他用于表达的mysql会话存储模块正在被主动维护?
如果没有,我仍然可以使用MySQLdb来存储用户信息等,并使用另一种数据库来存储会话吗?喜欢Redis还是MongoDB?这是好习惯吗?
在nodejs中是否有任何安全问题或使用全局变量和分配模块到全局变量的东西?
例:
client = new Client();
Run Code Online (Sandbox Code Playgroud)
没有var声明,我可以在任何地方使用它吗?
我正在尝试编写用于身份验证的中间件。我希望这个 if 语句将用户重定向到'/'(如果他们未登录)。如果他们已登录,我不想将他们重定向到“/news”。
/*Simplified for this example*/
if(rs.authenticated === true) {
next();
} else {
res.redirect('/');
}
Run Code Online (Sandbox Code Playgroud)
有没有办法在这些 if 语句中做到这一点?或者我必须写一个新方法?我已经尝试了几种使用 if 语句的方法,但我只是得到重定向循环。
express ×7
javascript ×7
node.js ×7
codeigniter ×2
mysql ×2
php ×2
session ×2
command-line ×1
cookies ×1
redirect ×1
regex ×1
routes ×1
socket.io ×1
xss ×1