译者|陈军评论|一种在目标网站上注入恶意脚本的方法。它对用户和站点构成严重威胁,因为攻击者可以使用它来冒充用户、访问敏感数据,甚至更改站点的页面内容。该风险位居2021年最危险的25个常见漏洞榜单的第二位。对此,我们在创建和维护网站时,往往需要提前对其有充分的了解,并采取相应的防范措施。1.跨站脚本是如何工作的在了解跨站脚本是如何工作之前,让我们先了解一下同源策略(SOP)的含义。SOP是一种安全机制策略,限制一个网站(一个来源)读取或写入另一个网站(其他来源)。因此,它可以从根本上防止恶意网站向受信任的网站发送恶意代码。跨站脚本攻击通常利用浏览器无法区分合法HTML和恶意代码的能力来绕过同源策略。例如,攻击者可以直接将JavaScript代码注入目标网站。一旦用户的浏览器执行此类代码,攻击者就可以获得会话令牌、cookie和其他敏感数据的访问权限。目前,攻击者通常使用反射、存储和基于DOM的跨站脚本来攻击目标网站。2.ReflectedXSSReflectedXSS是将JavaScript直接注入用户的输入域。这样的JavaScript可以是Echo、Redirect或Cookie收集器。例如,攻击者将脚本插入到目标的搜索词中,生成例如获取数据库数据请求的搜索结果。一旦目标客户端提交了这样的查询,注入其中的脚本就会立即被触发执行。例如,在用户搜索期间,攻击者可能会插入JavaScript来响应要求受害者输入密码或用户名的表单。然后,一旦用户认为这是来自原始站点的请求并继续执行,他们可能会在不知不觉中将其受信任的凭据提交给攻击者。有时,攻击者还可以使用脚本将用户从易受攻击的页面重定向到恶意构建的页面,还可以提交表单以获得信任凭证。3.存储型XSS与反射型XSS的不同之处在于,存储型XSS针对易受攻击网站的整个用户群。攻击者可以通过将脚本存储在网站的数据库中并在页面加载时触发存储脚本的持久执行来破坏网站的整体完整性。4.DOM-basedXSS存储和反射XSS通常针对网站的服务器端请求,而基于DOM的XSS针对运行时活动。它通过将脚本插入执行特定任务的网站组件来改变其初衷。这些组件通常执行与DOM相关的任务,例如更改网站元素、使网页无响应。5.如何防止Node中的跨站脚本攻击您通常可以采取以下步骤来防止Node.js中的跨站脚本攻击:清理输入由于攻击者必须能够将数据发送到目标Web应用程序并将其推送到只能执行用户XSS攻击,因此您需要采取的第一个预防措施是清除用户输入到Web应用程序的所有数据。它可以确保服务器端在根据用户输入执行后续操作之前检测并剔除各种虚假和恶意的“脏”数据。您可以手动执行此操作,也可以使用验证器之类的工具来加快整个过程。您可以使用验证器来转义用户输入中的HTML标记,如以下代码片段所示:.escape(用户输入);运行上述代码后,经过清理的输出将如下所示:Jane限制用户输入验证用于限制用户可以提交的输入类型表单。例如,如果您为电子邮件提供输入字段,则只允许用户输入正常的电子邮件格式。由此,您可以最大限度地减少攻击者提交错误数据的机会。当然你也可以在这里使用validator的相关代码包。实现HTTP-onlycookie策略在浏览器中,cookie会将数据存储在本地缓存中,并通过HTTP发送回服务器。但是,它们也很容易成为目标。攻击者可以使用JavaScript通过浏览器访问它们。HTTP-onlycookie是一种防止客户端脚本访问cookie中数据的策略。也就是说,即使您的Web应用程序包含可被攻击者利用的漏洞,他们也将无法相应地访问cookie。下面是一个如何使用Express在Node.js中实现HTTP-onlycookie策略的示例:app.use(express.session({secret:"secret",cookie:{httpOnly:true,secure:true}}))如上面的代码片段所示,如果攻击者试图访问将httpOnly标记设置为true的cookie,他们只会收到一个空字符串。6.小结俗话说:知易行难。大多数Web应用运营商都知道网站安全的重要性,但在实施过程中却经常会遇到各种复杂的情况。在上一篇文章中,我给大家简单介绍了跨站脚本攻击的基本原理以及在Node.js中如何防范。希望以上内容对大家的网站加固实践有所帮助。原文链接:https://www.makeuseof.com/prevent-cross-site-scripting-in-nodejs/译者介绍陈朱利安(JulianChen),社区编辑,拥有十多年IT项目实施经验和擅长对内外部资源和风险实施管控,注重传播网络与信息安全知识和经验;持续以博文、专题、翻译等形式分享前沿技术和新知识;经常通过线上和线下的方式开展信息安全培训和培训。教。
