小编nlc*_*nlc的帖子

保护 Express 免受 XSS:对整个传入请求的 HTML 实体进行编码是否足够?

我有一个要防止 XSS 的 Express 应用程序。

我将一些关于 XSS 的页面(包括OWASP的页面)改成了红色,鉴于我的应用程序特性,我决定编写一个中间件,<>"'在我在路由中使用请求参数之前,对 HTML 实体(更准确地说是 XML 实体,包括)进行编码。

我还在连接时刷新会话 cookie,以防止 cookie 被盗。

我如何构建我的应用程序

  • 所有AJAX请求都是POST(所有参数由中间件重写)
  • 我不使用 GET 参数
  • 我使用的路由参数应该是 int 并且当它们不是时我会引发错误。
  • 唯一不是来自用户输入的数据来自 OAuth 个人数据检索,当它们进入我的应用程序时我也会对其进行消毒
  • 在页面加载时执行的客户端 JS 只涉及来自数据库的数据,假设它们在进入数据库时​​由中间件清理。
  • window.location 被安全使用
  • 我还没有使用任何外部客户端 JS 库(如 JQuery 或 FileUpload)——也许我稍后会在代码中添加它们
  • 当用户输入一些东西时,它总是被发送到服务器(通过 AJAX POST),我借此机会发回经过消毒的输入以在 JS 和/或 DOM 中使用它而不是初始输入
  • 我不使用 eval

我的感受

我的结论是,通过这种行为(在外部数据到来时清理它们),我避免了所有存储和反射的 XSS,并且正确使用 windows.location 可以防止我对抗基于 DOM 的 XSS。

这个结论是对的,还是我忘记了什么?我还应该使用一些头盔功能吗?

编辑

我的问题不是什么是最好的 HTML sanitizer 服务器端(即使它是它的一部分),我更想知道我在代码中放置的保护措施是否可以保护我的应用程序免受所有众所周知的 XSS 类型的侵害。特别是我会知道我的中间件是否不是一个坏习惯。

事实上,PHP中的XSS 过滤功能至少没有涵盖基于 DOM 的 XSS 攻击(因为它只涵盖了服务器端的 HTML …

xss sanitize node.js express

5
推荐指数
1
解决办法
4947
查看次数

标签 统计

express ×1

node.js ×1

sanitize ×1

xss ×1