发送请求将令牌重置为以前的状态是否不安全?
Is it insecure to send a request to reset token to previous state?
我正在使用Meteor及其帐户系统。我的注册过程包括重置密码的几个步骤。
Template['enrollment'].events({
'submit #reset-password-form': function (e, template) {
e.preventDefault();
let token = Session.get('_resetPasswordToken');
let user = Meteor.users.findOne({ "services.password.reset.token": token });
let password = $(e.target).find('input#password').val();
if (AutoForm.validateForm('reset-password-form')) {
resetPasswordAsync(token, password)
.then(() => {
return Meteor.promise('Orders.initialize', template.data);
})
// a few more `.then()s`
.catch((error) => {
Notify.warn(error.message);
Meteor.call('User._resetToken', user, token);
})
}
}
});
这样做的原因是,如果承诺链中出现任何错误,那么它们将保持在同一页面上,但具有"未初始化"状态。
我使用流星方法,因为用户不应该能够更改他/她的服务来更改他们的令牌。
Meteor.methods({
'User._resetToken': function (user, token) {
check(user, Meteor.users.simpleSchema());
check(token, String);
Meteor.users.update(user._id, {
"services.password.reset.token": token
});
}
});
我隐约觉得这是不安全的,但不知道为什么。是否存在可以利用回调上重置用户令牌的漏洞?
首先不要向方法提供user对象,用户可能能够重置其他用户的重置令牌。
其次,仅仅因为你把它放在一个服务器方法中并不能保证它是安全的。控制台的用户可以输入Meteor.call(user,token)
并重置他们的令牌或任何其他用户的令牌(假设他们知道其他用户的_id)。
如果用户已经重置了密码,则不再需要令牌。它只需要短暂的生命。
相关文章:
- 检查元素是否将状态从隐藏更改为可见
- 我如何为列出的选项卡元素编写一个Protractor测试,它会检查它是否's是否处于活动状态
- Angular+bootstrap ui,检查当前选项卡是否已处于活动状态
- reactjs-redux,是否可以有一个由2个组件使用的状态
- 是否可以在reactjs中设置多个状态变量
- 检查网络驱动程序是否浏览器仍处于打开状态
- 检查 redux 状态是否更改的简单方法
- Reactjs:在修改对象之前,是否需要复制处于组件状态的对象
- 是否可以在没有视图状态和回发的情况下使用asp.net web表单
- 使用jquery检查internet是否处于活动状态
- 查看CSS:invalid选择器当前是否在JavaScript中处于活动状态
- 如何检查Promise是否处于挂起状态
- 如何查找页面状态是否在 AJAX 或 Java 脚本 ASP.NET 更改
- 通过道具操纵状态是否正确
- UI状态是否应存储在模型或控制器中
- 窗口状态是否在导航后持续存在
- 检查事件函数中的组件状态是否有效
- 发送请求将令牌重置为以前的状态是否不安全?
- 通过props来初始化子组件的状态是否正确?
- 在离开窗口前询问if状态是否为真