有人可以告诉我如何转义输入值以防止SQL注入吗?我有一个用户身份验证应用程序,我需要以某种方式导入一些安全性。
我的验证如下所示:
//Validation
req.checkBody('name', 'Name is required').notEmpty();
req.checkBody('email', 'Email is required').notEmpty();
req.checkBody('email', 'Email is not valid').isEmail();
req.checkBody('password', 'Password is required').notEmpty();
req.checkBody('password', 'Password must have at least 6 characters').len(6,20);
req.checkBody('password2', 'Passwords do not match').equals(req.body.password);
Run Code Online (Sandbox Code Playgroud)
然后我的INSERT一些值如下:
var stmt = db.prepare("INSERT INTO users ( id, name, email, password, salt) VALUES (NULL, ?, ?, ?, ?)");
stmt.run([ name, hashEmail(email,'salt'), hashPassword(password,'salt'), 'salt'], function(error){ //.....
Run Code Online (Sandbox Code Playgroud)
有人告诉我这不是真正安全的导入价值的方法,但是只要我对互联网安全没有真正的经验,我将需要您的帮助。
问候
我需要你的帮助。
我有一个按钮,可以复制某些内容,并且该“内容”应立即出现在页面上。问题在于该按钮具有复制功能,但是现在我必须手动刷新页面才能看到更改。
我不认为这有些棘手,但我尝试了以下尝试但没有成功:
<form method="post" action="/users/copy?scene=<%= scene.id %>">
<button type="submit" class="btn btn-primary" onClick="window.location.href=window.location.href">Copy the scene</button>
</form>
Run Code Online (Sandbox Code Playgroud)
我的意思是,如果更改"submit"为"button",它可以工作,但是复制内容的功能不再起作用。
我用谷歌搜索,但到目前为止找不到任何答案。
任何帮助将非常感激
因此,我才意识到甚至在添加刷新页面的功能之前,本地主机就已加载,因此服务器上必须有未完成的请求。我认为这是在此功能:
router.post('/copy', function(req,res,call) {
if( req.param('scene') !== undefined ){
db.serialize(function () {
db.run("CREATE TABLE temp_table as SELECT * FROM scene where id=?", req.param('scene'));
db.run("UPDATE temp_table SET id = NULL, user_id = (SELECT id FROM users WHERE email =?)",GLOBAL.email);
db.run("INSERT INTO scene SELECT * FROM temp_table");
db.run("DROP TABLE temp_table");
// res.render('copy');
if(error) {
console.log(error);
}
});
db.close();
} …Run Code Online (Sandbox Code Playgroud) 我timestamp在 SQLite 中对 a 进行排序时遇到了一些小困难,我尝试了所有方法,但仍然无法获得正确的结果。
我有一个时间戳,我尝试对其进行排序,因此最新的将是第一个。
我已经尝试过以下代码:
db.each("SELECT values ORDER BY datetime(timestamp) DESC LIMIT 200");
db.each("SELECT values ORDER BY datetime('timestamp') DESC LIMIT 200");
db.each("SELECT values ORDER BY datetime("timestamp") DESC LIMIT 200");
db.each("SELECT values ORDER BY date(timestamp) DESC LIMIT 200");
db.each("SELECT values ORDER BY timestamp DESC LIMIT 200");
Run Code Online (Sandbox Code Playgroud)
最后一个选项给了我一些最接近的结果,不幸的是它仅按时间对时间戳进行排序,例如 11 月 17 日创建的行将被正确排序,而 11 月 18 日创建的行将“较旧”。
请参阅以下屏幕:
我的timestamp格式如下:
Thu Nov 17 2016 11:47:56
Run Code Online (Sandbox Code Playgroud)
这应该是非常微不足道的,即使我没有弄清楚出了什么问题。
编辑:
我生成的函数timestamps如下所示:
var timestamp = new Date().toString().replace(' GMT+0100 (CET)', '');
Run Code Online (Sandbox Code Playgroud)