簡體   English   中英

如何正確清理 NestJS 輸入?

[英]How to Properly Sanitize NestJS Input?

我問這個是因為我似乎無法得到一個直接的答案。

因此,NestJS 有一種非常優雅的方式來使用裝飾器來處理驗證。 也就是說,您可以使用您期望的屬性定義 DTO 類,並使用類驗證器裝飾器對它們進行注釋。 例如,假設我們有一個接受來自聯系表單的輸入的路由。

class ContactInfoDTO {
     @IsString()
     @IsNotEmpty()
     name: string
     
     @IsEmail()
     email: string
     
     @IsString()
     @IsNotEmpty
     subject: string

     @IsString()
     @IsNotEmpty()
     body: string

}

這非常適合驗證。 如果我輸入無效的電子郵件,它會按預期拒絕。 但是,這是我的問題。 輸入消毒怎么樣? 比如說,我在 body 參數中輸入了一些 JavaScript? 比如說,我的身體看起來像這樣:

body: “Hello <script>//some malicious code here</script>”

現在,這仍然被接受。 即使腳本標簽沒有轉換為 HTML 實體,這確實會帶來一些安全風險。

所以,我的問題是 NestJS 是否有任何內置的消毒機制? 是否有關於此的適當文件? 因為我真的找不到任何東西,盡管這種東西在 Web 開發的上下文中非常重要。

在 NestJS 中進行輸入清理的最佳實踐是什么?

您可以使用 class-sanitizer並將其裝飾器應用於模型的屬性:

class ContactInfoDTO {
     @IsString()
     @IsNotEmpty()
     name: string
     
     @IsEmail()
     email: string
     
     @IsString()
     @IsNotEmpty
     subject: string

     @IsString()
     @IsNotEmpty()
     @Escape()
     body: string

}

像這樣將sanitize-htmlTransform一起使用:

import { ApiProperty } from '@nestjs/swagger';
import { Transform } from 'class-transformer';
import { IsString } from 'class-validator';
import * as sanitizeHtml from 'sanitize-html';

export class DocumentDto {
  @ApiProperty()
  @IsString()
  @Transform((value: string) => sanitizeHtml(value))
  public content: string;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM