加入收藏 | 设为首页 | 会员中心 | 我要投稿 河北网 (https://www.hebeiwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 业界 > 正文

怎样防止Node.js中的不安详跳转

发布时间:2018-10-21 03:42:51 所属栏目:业界 来源:lucywang
导读:什么是不安详的重定向? 对付任何web开拓职员来说,不安详或未履历证的重定向都是重要的安详思量身分。Express为重定向提供了当地支持,使它们易于实现和行使。然而,Express将执行输入验证的事变留给了开拓职员。Express是一种保持最低水平手限的机动Node.
副问题[/!--empirenews.page--]

什么是不安详的重定向?

对付任何web开拓职员来说,不安详或未履历证的重定向都是重要的安详思量身分。Express为重定向提供了当地支持,使它们易于实现和行使。然而,Express将执行输入验证的事变留给了开拓职员。Express是一种保持最低水平手限的机动Node.js Web应用措施框架,为Web和移动应用措施提供一组强盛的成果。

下面是OWASP.org网站给出的“未履历证的重定向和转发”的界说:

重定向凡是在登录和身份验证进程中行使,因此可以在登录之前将用户重定向到他们地址的页面。但按照营业需求或应用措施范例而有所差异,也存在其他重定向环境。

怎样防止Node.js中的不安详跳转

为什么要停止重定向?

不验证用户输入的重定向,可以使进攻者具备提倡收集垂纶诈骗的前提,从而窃取用户根据并执行其他恶意操纵。

留意:当在Node.js或Express中实现重定向时,在处事器端执行输入验证很重要。

假如进攻者发明用户没有验证外部用户提供的输入,他们也许会操作这个裂痕在论坛、交际媒体和其他民众场合宣布专门计划的链接,让用户点击它。

从外貌上看,这些URL看起来正当且对用户来说并无威胁,这是由于全部这些要重定向的URL都包括方针的主机名:

https://example.com/login?url=http://examp1e.com/bad/things

可是,假如处事器端重定向逻辑未验证输入url参数的数据,则用户也许最终会会见黑客所提前配置的网站(examp1e.com),满意进攻的需求!以上只是进攻者怎样操作不安详重定向逻辑的一个例子。

不安详重定向例子并将其直接转达到Express res.redirect()要领中。因此,只要用户通过身份验证,Express就会将用户重定向到输入或提供的URL。

  1. var express = require('express'); 
  2. var port = process.env.PORT || 3000; 
  3. var app = express(); 
  4.  
  5. app.get('/login', function (req, res, next) { 
  6.  
  7.     if(req.session.isAuthenticated()) { 
  8.  
  9.         res.redirect(req.query.url); 
  10.     } 
  11. });  
  12.  
  13. app.get('/account', function (req, res, next) { 
  14.     res.send('Account page'); 
  15. }); 
  16.  
  17. app.get('/profile', function (req, res, next) { 
  18.     res.send('Profile page'); 
  19. }); 
  20.  
  21. app.listen(port, function() { 
  22.     console.log('Server listening on port ' + port); 
  23. }); 

输入验证有助于防备不安详的重定向

凡是,最好停止在代码中行使重定向和转发。假如你必然必要在代码中行使重定向,则首选的要领是行使映射到特定方针的预界说输入,这被称为白名单要领。以下就是实现这种要领的一个详细样本步调:

  • baseHostname会确保任何重定向都将用户保存在研究职员的主机上;
  • redirectMapping是一个工具,它将预界说的输入(譬喻,转达给url paramer的内容)映射随处事器上的特定路径;
  • validateRedirect()要了解判定预界说的输入是否存在,假如它们存在,则返回要重定向的恰当路径;
  • 研究职员修改了/login逻辑,然后将baseHostname+redirectPath变量毗连在一路,这就停止了任何用户提供的输入内容直接转达到Express res.redirect()要领中;
  • 最后,研究职员行使encodeURI()要领作为特另外安详担保,确保毗连字符串的URI部门被正确编码,以应承干净的重定向。
  1. //Configure your whitelist 
  2. var baseHostname = "https://example.com"; 
  3. var redirectMapping = { 
  4.     'account': '/account', 
  5.     'profile': '/profile' 
  6.  
  7. //Create a function to validate whitelist 
  8. function validateRedirect(key) { 
  9.     if(key in redirectMapping) { 
  10.  
  11.         return redirectMapping[key]; 
  12.     }else{ 
  13.  
  14.         return false; 
  15.     } 
  16.  
  17. app.get('/login', function (req, res, next) { 
  18.     if(req.session.isAuthenticated()) { 
  19.         redirectPath = validateRedirect(req.query.url); 
  20.  
  21.         if(redirectPath) { 
  22.             res.redirect(encodeURI(baseHostname + redirectPath)); 
  23.         }else{ 
  24.             res.send('Not a valid redirect!'); 
  25.         } 
  26.     } 
  27. }); 

其他重定向场景

(编辑:河北网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读