ORM 或中间件清理级别?

问题描述 投票:0回答:1

我目前正在开发一个使用 Nest.JS 作为后端框架的 Web 应用程序。 我想清理值以避免潜在的 XSS 攻击(包 sanitize-html)。

我是否应该在全局中间件上进行清理以尽快清理字符串(标头、正文和查询),或者与我的 ORM (TypeORM) 相关联,因为它是最深的级别。但这可能会导致我想要保存的内容与数据库中的内容之间出现一些数据不一致。

谢谢你。

nestjs typeorm middleware xss sanitization
1个回答
0
投票

您使用的包是为了清理 html (https://www.npmjs.com/package/sanitize-html)。 因此,如果您的 API 在其请求中收到 HTML 内容,最好在中间件中对其进行清理。最好只在 API 中操作“干净”的数据。因此,请在最高级别上执行此操作,无论您在何处以及如何使用 HTML,您都知道它是安全的。也许有一天您不会将其直接保存在数据库中,并且您会想用它做其他事情,例如生成文档或其他任何事情。那天您将不需要问自己是否已消毒。

但是这个包只对 html 内容有用。标头不应包含 HTML,并且您可能会有一些不包含 HTML 的查询参数或正文。如果您想在 NestJS 中验证这些其他参数,我建议您使用 DTO 和守卫。

DTO 与 NestJS ValidationPipe 相结合将允许您验证正文和查询参数,以确保没有禁止的数据。 NestJS 文档中有一些基本示例:https://docs.nestjs.com/techniques/validation#auto-validation

如果您想验证标头,您可以在防护程序(参见https://docs.nestjs.com/guards)或任何类型的中间件中进行。

关于 TypeORM,它的工作并不是真正保护您免受 XSS 攻击,而是保护您免受 SQL 注入攻击。默认情况下,所有 ORM 都会清理 SQL 请求(只要您使用其核心 API 或查询构建器/运行器),因此您无需对此执行任何操作。

© www.soinside.com 2019 - 2024. All rights reserved.