[英]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-html
與Transform
一起使用:
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.