Node.js中的不安全跳转如何防御详解(2)

在某些情况下,将每个组合列入白名单是不切实际的,不过有些安全平台仍然希望重定向用户并将其保留在域内某些边界内。当外部提供的值遵循特定模式(例如16个字符的字母数字字符串)时,最好这样做。字母数字字符串是理想的,因为它们不包含任何可能引入其他攻击的特殊字符,例如目录/路径遍历(依赖于诸如…和向后/向前斜杠之类的字符)。

例如,安全平台可能希望在用户登录后将其重定向回电子商务网站上的特定产品。由于电子商务网站对每种产品都有唯一的字母数字值,因此安全平台可以通过始终根据RegEx白名单验证外部输入来实现安全重定向。在本文所讲的样本在,研究者用的是productId变量。

//Configure your whitelist var baseHostname = "https://example.com"; app.get('/login', function (req, res, next) { productId = (req.query.productId || ''); whitelistRegEx = /^[a-zA-Z0-9]{16}$/; if(productId) { //Validate the productId is alphanumeric and exactly 16 characters if(whitelistRegEx.test(productId)) { res.redirect(encodeURI(baseHostname + '/item/' + productId)); }else{ //The productId did not meet the RegEx whitelist, so return an error res.send('Invalid product ID'); } }else{ //No productId was provided, so redirect to home page res.redirect('https://www.jb51.net/'); } });

最后,安全平台发出警告,警告用户他们正在被自动重定向是值得重视的。如果安全平台有意将用户重定向到域外,则可能需要在流程中创建一个中间页面,该页面会发出如下警告,并包含用户要重定向到的URL。

Node.js中的不安全跳转如何防御详解


注:本文是以Hailstone为例进行讲解的,Hailstone是一个应用程序安全平台,它有查找代码中的漏洞功能。

本文翻译自:https://blog.hailstone.io/how-to-prevent-unsafe-redirects-in-node-js

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对脚本之家的支持。

您可能感兴趣的文章:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/60127f9047ae54735e41eae29f844a4e.html