展开

关键词

使用NodeJs(Express)搞定用户注册、登录、授权

最近在学些NodeJs和Express框架开发后台接口,Express 是一个保持最小规模的灵活的 Node.js Web 应用程序开发框架,为 Web 和移动应用程序提供一组强大的功能。 编码前的准备:第三方库和rest-client插件安装我的nodejs版本是:v10.16.0, npm版本是:6.9.0,cnpm的版本是6.1.0,express的版本是4.16.1,由于npm = require(bcrypt) const saltRounds = 10 const bcrypt = require(bcryptjs) mongoose.connect(mongodb:localhost 执行nodemon .server.js开启服务端,服务器会在对应的3001端口上监听客户端的http请求,然后打开test.http文件,在相应的登录、注册、查询所有用户的请求,使用Ctrl+鼠标单击住 参考资料1小时搞定NodeJs(Express)的用户注册、登录和授权全栈之巅-Node.js+Vue.js全栈开发深度爱好者和实践者Express 4.x APIExpress中文官网NodeJs菜鸟教程

2.3K10

关于NodeJS原理的五个误解

但是,由于对 NodeJS 的这些内部组件的方式缺乏了解,因此许多 NodeJS 开发人员对 NodeJS 的行为做出了错误的理解,并开发了导致严重性能问题以及难以跟踪的错误的应用程序。 从 C++ 插件调用一个函数,该函数被编写为异步函数(例如bcrypt)接受回调函数为参数不会使函数异步。 强烈建议不要以这种不一致的方式(在此功能同时执行同步和异步操)编写函数,因为这会使应用程序的行为无法测。 但是,你可以编写自己的 C++ 插件,使你能够安排 libuv 线程池上的。有某些第三方库(例如 bcrypt),它们执行CPU密集型操并使用 C++ 插件来实现针对CPU绑定操的异步API。 因此,执行阻塞CPU密集型操的一个线程不会影响其他线程的事件循环,从而使它们可用于任何传入的。但是,在撰写本文时,IDE对 Worker Threads 的支持还不是最大。

31520
  • 广告
    关闭

    90+款云产品免费体验

    提供包括云服务器,云数据库在内的90+款云计算产品。打造一站式的云产品试用服务,助力开发者和企业零门槛上云。

  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    原生 JavaScript + NodeJS(Express 框架) 做一个简陋的登录注册项目

    当然可以在具体文件配置,但是这儿方便一点在线 demo:https:auth.bilibilianime.com仓库: https:github.comayasa520NJU-WEBweb_3部署(启动)览前端 只开后端node .binwww 或者 npm start前后端都开npm run dev完成点 登录 注册 密码强度前端判定(很弱,仅仅是装装样子) token 保留登录状态 图形验证码 bcrypt ,密码就会被加盐, 然后哈希, 存入数据库. bcrypt 的盐无需存储. 散列一下 return bcryptjs.hashSync(val,bcryptjs.genSaltSync(10)); }, },});用户登录成功后, nodejs 产生一个 token 发送给客户端 我没有做 token 定失效.token 加密需要用到 SECRET, 最好是做成环境变量, 此处我定义成全局变量app.post(apilogin,, async (req, res) => {

    2720

    我们应该如何保护用户的密码

    攻击密码的主要方法我们需要防御的两种主要的密码攻击方式是:字典攻击暴力攻击它们的方式非常简单:使用先生成的密码哈希列表并进行简单的比较,以找到创建所需哈希的字符串。 对于加盐的密码,可以下载大量先生成的密码列表。然后只需要简单查找即可。这种列表称被为彩虹表。 与慢速哈希(例如bcrypt,scrypt和pbkdf2)不同,MD5或SHA-1(或SHA-256,SHA-512等)是消息摘要算法,它们旨在快速验证给定消息是否被篡改。 鉴于硬件的进步速度,我们应该望今天使用相同的硬件的花费会大大降低,或者使用今天的硬件,性能会比2012年时提高大约6-8倍。 上面的图表里的结果显示如果你(2012年)仍在使用加盐(或非唯一)的MD5哈希值为密码,那么2012年使用此配置硬件的的攻击者每秒可以进行180,000,000,000次哈希。

    16530

    ORDER BY导致使用索引

    在MySQL中经常出现照理想情况使用索引的情况,今天记录一种Order by语句的使用导致使用索引的情况。1. ----------+----------------------------------------------------+1 row in set, 3 warnings (0.00 sec)也的情况正常

    20210

    该如何设计你的 PasswordEncoder?

    远古时,明文存储密码可能还不被认为是一个很大的系统缺陷(事实上这是一件很恐怖的事)。 PBKDF2 被设计的很简单,它的基本原理是通过一个伪随机函数(例如 HMAC 函数),把明文和一个盐值为输入参数,然后照设置的计算强度因子重复进行运算,并最终产生密钥。 理论终归是理论,实际上 Bcrypt 算法被发明至今 18 年,使用范围广,且从因为安全问题而被修改,其有限性是已经被验证过的,相比之下 Scrypt 据我看到的文章显示是 9 年的历史,没有 Bcrypt 从破解成本和权威性的角度来看,Bcrypt密码编码器是不错的选择。 return PasswordEncoderFactories.createDelegatingPasswordEncoder();} 负责生产 DelegatingPasswordEncoder 的厂方法

    91810

    如何存储用户的密码才能算安全?

    远古时,明文存储密码可能还不被认为是一个很大的系统缺陷(事实上这是一件很恐怖的事)。 PBKDF2 被设计的很简单,它的基本原理是通过一个伪随机函数(例如 HMAC 函数),把明文和一个盐值为输入参数,然后照设置的计算强度因子重复进行运算,并最终产生密钥。 理论终归是理论,实际上 Bcrypt 算法被发明至今 18 年,使用范围广,且从因为安全问题而被修改,其有限性是已经被验证过的,相比之下 Scrypt 据我看到的文章显示是 9 年的历史,没有 Bcrypt 从破解成本和权威性的角度来看,Bcrypt密码编码器是不错的选择。 return PasswordEncoderFactories.createDelegatingPasswordEncoder();}负责生产 DelegatingPasswordEncoder 的厂方法

    34130

    密码学系列之:bcrypt加密算法详解

    bcrypt函数是OpenBSD和其他系统包括一些Linux发行版(如SUSE Linux)的默认密码哈希算法。bcrypt原理我们先回顾一下Blowfish的加密原理。 blowfish首先需要生成用于加密使用的K数组和S-box, blowfish在生成最终的K数组和S-box需要耗费一定的时间,每个新的密钥都需要进行大概4 KB文本的处理,和其他分组密码算法相比, 所以处理只会生成一次。在后面使用的时候就会很快了。而对于恶意攻击者来说,每次尝试新的密钥都需要进行漫长的处理,所以对攻击者来说要破解blowfish算法是非常不划算的。 然后经过一轮轮的标准Blowfish算法,通过交替使用salt 和 password为key,每一轮都依赖上一轮子密钥的状态。 有朋友会问了,bcrypt不是用来对密码进行加密的吗?怎么加密的是一个字符串?别急,bcrpyt是将密码为对该字符串加密的因子,同样也得到了加密的效果。

    16940

    密码学系列之:bcrypt加密算法详解

    bcrypt函数是OpenBSD和其他系统包括一些Linux发行版(如SUSE Linux)的默认密码哈希算法。bcrypt原理我们先回顾一下Blowfish的加密原理。 blowfish首先需要生成用于加密使用的K数组和S-box, blowfish在生成最终的K数组和S-box需要耗费一定的时间,每个新的密钥都需要进行大概4 KB文本的处理,和其他分组密码算法相比, 所以处理只会生成一次。在后面使用的时候就会很快了。而对于恶意攻击者来说,每次尝试新的密钥都需要进行漫长的处理,所以对攻击者来说要破解blowfish算法是非常不划算的。 然后经过一轮轮的标准Blowfish算法,通过交替使用salt 和 password为key,每一轮都依赖上一轮子密钥的状态。 有朋友会问了,bcrypt不是用来对密码进行加密的吗?怎么加密的是一个字符串?别急,bcrpyt是将密码为对该字符串加密的因子,同样也得到了加密的效果。

    30010

    你如何在PHP中使用bcrypt来哈希密码

    我偶尔会听到“使用bcrypt在PHP中存储密码,bcrypt规则”的建议。但是什么bcrypt? 河豚是一种通用密码,它有两种方式。如果它可以被加密,它可以被解密。密码需要单向散列函数。什么是解释?bcrypt是一种哈希算法,可以通过硬件进行扩展(通过可配置的循环次数)。 添加到每个密码盐(bcrypt需要盐),你可以肯定的是,一个攻击实际上是不可行的,没有可笑的金额或硬件。bcrypt使用Eksblowfish算法来散列密码。 虽然Eksblowfish和Blowfish的加密阶段完全相同,但Eksblowfish的关键调度阶段确保任何后续状态都依赖salt和key(用户密码),并且在没有两者都知道的情况下不能先计算状态。 如何使用bcrypt:使用PHP> = 5.5-DEV密码散列函数现在已直接构建到PHP> = 5.5中。您现在可以使用password_hash()创建bcrypt任何密码的哈希值:

    34330

    软件测试实践干货 | 测试登录功能的思路与原理解析(基于 Spring Security)

    “XSS 跨站脚本攻击”字符串,验证系统行为是否被篡改;9.连续多次登录失败情况下,系统是否会阻止后续的尝试以应对暴力破解;10.同一用户在同一终端的多种浏览器上登录,验证登录功能的互斥性是否符合设计 性能压力测试1.单用户登录的响应时间是否小于 3 秒;2.单用户登录时,后台请求数量是否过多;3.高并发场景下用户登录的响应时间是否小于 5 秒;4.高并发场景下服务端的监控指标是否符合;5.高集合点并发场景下 Inversion of Control ,DI:Dependency Injection 依赖注入)和 AOP(面向切面编程)功能,为应用系统提供声明式的安全访问控制功能,减少了为企业系统安全控制编写大量重复代码的 ;相对比BCrypt加盐的方式,BCrypt加密就更为安全的多了。 以上,本文主要用自己的总结,有不对和不足的地方请大家多指正。

    23400

    Pike版本变慢,不慌,看云计算十年老兵教你一招化解

    者简介 ? ? 缘起 升级到Pike版本以后,服务反应非常慢,因此去追查原因。K版和P版的速度对比,如下: Kilo版(0.077s): ? Pike版本(0.480s): ? 这个是上层调用函数,后面函数在272行(method.authenticate),通过追查,发现默认的backend的SQL,继续追查keystoneidentitybackendssql.py ? 配置了4种Hash算法,默认采用第一种bcrypt算法。通过反复对比,发现函数耗时就在密码验证。 原因 在Kilo版本中,密码验证采用的是sha512_crypt,如下: ? 相比SHA-512,Bcrypt的速度实在低得可怜。所以问题和明显,修改算法就能解决问题,考虑到bcrypt的安全性,还是不要太降低安全性才好,通过查看文档,bcrypt算法中,有一个参数:加密轮数。 悄悄讲个内幕 自从我们放出美少女架构师之后,很多人在后台留言,要求进行深入的技(qing)术(gan)交流,晓东哥捺不住埋藏多年的网红梦,熬夜写稿,强行加档,请走过的,路过的多多转发,送他出道~

    32030

    关于 Node.js 的认证方面的教程(很可能)是有误的

    数以千计的前端开发人员被投入到服务器端的 JS 漩涡中,试图通过拷贝式的操或无偿使用的 npm install 将这些教程中的可操的知识拼凑在一起,从而在外包经理或广告代理商给出的限内完成开发。 攻击者只需为每个用户发出密码重置,从 DB 读取加密的令牌,并为用户帐户设置自己的密码,而不必经历使用 GPU 装备对 bcrypt 散列进行的昂贵的字典攻击过程。 让我们克隆 Scotch 的这个资源库,照说明进行运行。 请注意,JSON Web 令牌已签名但加密。这意味着两个时之间的大斑点是一个 Base64 编码对象。快速解码后,我们得到一些有趣的东西。?我喜欢在明文的密码中使用令牌。 为你的 Express 应用程序增加凭证验证不应该是你的。应该有更好的办法。

    62290

    这些node开源具你值得拥有(上)

    (不过它只能并行)3.5 应用场景5:如何检查NPM模块使用的依赖。可以使用以下具:depcheck - 检查你的NPM模块使用的依赖。? 可以使用以下具:crypto-js - JavaScript加密标准库。支持算法最多node-rsa - Node.js版Bcrypt。 最后 如果你喜欢这个库,也给者huaize2020 一个star 仓库地址:awesome-nodejs 昨天看到一段话想分享给大家对于一个研发测的日常:1.开始的第一件事,规划今日的内容安排 (建议有清晰的ToDolist,且优先级排序)2.确认量与上下游关联风险(如依赖他人的,能否时提供出来);有任何风险,尽早暴露3.注意时间成本、不是任何事情都是值得你用尽所有时间去做的,分清主次关系 4.协任务,明确边界责任,不要出现谁都不管,完成任务后及时同步给相关人5.及时总结经验,沉淀技术产出实现能力复用,同类型任务,不用从零开始,避免重复

    17030

    16家国外网站近6.2亿用户信息被挂暗网出售

    卖家在网上挂出数据后即刻通知了上述网站中的6个:Dubsmash、Animoto、EyeEm、8fit、Fotolog和500px。 500px发言人Stephanie Newell表示:我们的程团队正在进行调查,如果确认存在违规行为,我们将采取必要措施,照GDPR标准通知用户。 CoffeeMeetsBagel的一位发言人表示:目前尚发现违规情况,但我们的安全团队现在正在调查这个问题。 DataCamp数据量:700,000售价:0.013 BTC(46.8美元)DataCamp是一款面向教师的科学和编程具,本次泄露的数据包含电子邮件地址、bcrypt-hashed密码、位置和其他配置文件详细信息 安全只是一种幻觉,很久以前我就开始网路攻击,而且只使用一些系统具。*参考来源:The Register,Freddy编译整理,转载请注明来自 FreeBuf.COM。

    69320

    部署企业内部聊天具Rocket.Chat开源IM系统

    主要功能:群组聊天,直接通信,私聊群,桌面通知,媒体嵌入,链接览,文件上传,语音视频 聊天,截图等等。 可以通过官方教程安装在这里:Deploying Rocket.Chat on Centos 7:https:rocket.chatdocsinstallationmanual-installationcentos主要依赖三个具 yum -y install epel-release && yum -y update一般情况下,新系统自带curl具,没有的话你需要安装,后面会用到,如下:yum install -y curl安装 node.js 和 npmyum install -y nodejs npm # node版本很重要需要安装`n`来切换版本npm install -g inherits n # 切换node版本, CentOS 6.Xetcinit.dmongod start尝试安装现在让我们做一个快速测试,看看是否一切正常,然后再继续:node main.jsmeteor npm install --save bcrypt

    3.2K20

    PHP中常见的密码处理方式和建议总结

    所以为开发者,我们需要对用户的密码做好防措施。关于密码我们应该遵守的一些原则 绝对不能知道用户的密码 我们绝对不能知道用户的密码,也不能有获取用户密码的方式。 但是,scrypt在算法层面只要没有破绽,它的安全性应该高于PBKDF2和bcrypt。目前,通过大量的审查,最安全的哈希算法是 bcrypt 。 在这个过程中,处理数据的次数叫因子(work factor)。因子的值越高,破解密码哈希值的时间会成指数倍增长。 bcrypt 算法永不过时,如果计算机的运算速度变快了,我们只需要提高因子即可。顺带说一下,任何情况下尽可能的不要使用 md5 算法,至少也要使用 SHA 系列的哈希算法。 PHP 在 PHP5.5.0+ 的版本中提供了原生的密码哈希API供我们使用,这个密码哈希API默认使用的就是 bcrypt 哈希算法,从而大大简化了我们计算密码哈希值和验证密码的操

    15330

    SpringBoot 实战 (十七) | 整合 WebSocket 实现聊天室

    今天这一篇建立在昨天那一篇的基础之上,为便于更好理解今天这一篇,推荐阅读:SpringBoot 整合WebSocket 实现广播消息 准备Spring Boot 2.1.3 RELEASESpring 这里的 Spring Security 配置很简单,具体就是设置登录路径、设置安全资源以及在内存中创建用户和密码,密码需要注意加密,这里使用 BCrypt 加密算法在用户登录时对密码进行加密。 (new BCryptPasswordEncoder().encode(nasus)).roles(USER) .and() 登陆时用 BCrypt 加密方式对用户密码进行处理。 String getLoginView(){ return login; } @GetMapping(chat) public String getChatView(){ return chat; } }测试结果应该是 具体操在 Chrome 的 设置-->管理用户-->添加用户:?谷歌浏览器添加用户两个用户分别访问 http:localhost:8080login 登录系统,跳转至聊天界面:?

    66520

    为什么说用 MD5 存储密码非常危险,这些你该清楚

    很多软件程师都认为 MD5 是一种加密算法,然而这种观点其实是大错特错并且十分危险的,为一个 1992 年第一次被公开的算法,到今天为止已经被发现了一些致命的漏洞,我们在生产环境的任何场景都不应该继续使用 哈希在今天,如果我们直接使用哈希来存储密码,那其实跟存储明文没有太多的区别,所有的攻击者在今天都已经掌握了彩虹表这个具,我们可以将彩虹表理解成一张计算的大表,其中存储着一些常见密码的哈希,当攻击者通过入侵拿到某些网站的数据库之后就可以通过计算表中存储的映射来查找原始密码 哈希加盐仅仅使用哈希来存储密码无法抵御来自彩虹表的攻击,在上世纪 70 到 80 年代,早版本的 Unix 系统就在 etcpasswrd 中存储加盐的哈希密码,密码加盐后的哈希与盐会被一起存储在 etcpasswd bcrypt哈希加盐的方式确实能够增加攻击者的成本,但是今天来看还远远不够,我们需要一种更加安全的方式来存储用户的密码,这也就是今天被广泛使用的 bcrypt,使用 bcrypt相比于直接使用哈希加盐是一种更加安全的方式 ,也是我们目前推荐使用的方法,为了增加攻击者的成本,bcrypt 引入了计算成本这一可以调节的参数,能够调节执行 bcrypt 函数的成本。

    12830

    为什么说用 MD5 存储密码非常危险,这些你该清楚

    很多软件程师都认为 MD5 是一种加密算法,然而这种观点其实是大错特错并且十分危险的,为一个 1992 年第一次被公开的算法,到今天为止已经被发现了一些致命的漏洞,我们在生产环境的任何场景都不应该继续使用 哈希在今天,如果我们直接使用哈希来存储密码,那其实跟存储明文没有太多的区别,所有的攻击者在今天都已经掌握了彩虹表这个具,我们可以将彩虹表理解成一张计算的大表,其中存储着一些常见密码的哈希,当攻击者通过入侵拿到某些网站的数据库之后就可以通过计算表中存储的映射来查找原始密码 哈希加盐仅仅使用哈希来存储密码无法抵御来自彩虹表的攻击,在上世纪 70 到 80 年代,早版本的 Unix 系统就在 etcpasswrd 中存储加盐的哈希密码,密码加盐后的哈希与盐会被一起存储在 etcpasswd bcrypt哈希加盐的方式确实能够增加攻击者的成本,但是今天来看还远远不够,我们需要一种更加安全的方式来存储用户的密码,这也就是今天被广泛使用的 bcrypt,使用 bcrypt相比于直接使用哈希加盐是一种更加安全的方式 ,也是我们目前推荐使用的方法,为了增加攻击者的成本,bcrypt 引入了计算成本这一可以调节的参数,能够调节执行 bcrypt 函数的成本。

    41650

    扫码关注云+社区

    领取腾讯云代金券