สมมติว่า เรามี function ใน controller ดังนี้
@Post()
async createRole (@Body() req: CreateRoleReqDto): Promise <Role> {
let role = await this.roleService.createRole(req);
return role;
}
และ class CreateRoleReqDto สำหรับ request ของเราเป็นดังนี้export class CreateRoleReqDto{
name: string;
description?: string;
permissionIds?: number[];
}
เมื่อเราส่ง request body ดังนี้
{
"name":"test3",
"description":"def",
"permissionIds": [1,2]
}
request body ของเราจะถูกแปลงเป็น instance ของ CreateRoleReqDto โดยอัตโนมัติ อย่างไรก็ตาม Class transformer ยังมีจุดอ่อนที่สำคัญและกระทบถึงความปลอดภัยของระบบได้
นั่นคือ การแปลงค่าของ class transformer จะแปลง JSON object ทั้งก้อนไปเป็น class instance ของเราเลย โดยไม่สนใจว่า property นั้นถูกกำหนดไว้ใน class หรือไม่
สมมติว่า เราส่ง request body เป็นดังนี้
{
"name":"test3",
"description":"def",
"created_date": "2020-01-01 12:00:00",
"permissionIds": [1,2]
}
ตัวแปร req ของเราที่เป็น instance ของ CreateRoleReqDto ก็จะมีหน้าตาแบบเดียวกับ request body นี้ ความเสี่ยงที่อาจเกิดขึ้น คือ ถ้า property ที่ถูกส่งเข้ามาเกินนั้น มีชื่อตรงกับ field ในฐานข้อมูล field นั้นจะถูกบันทึกค่าไปด้วย โดยที่เราไม่ได้ตั้งใจ
สำหรับข้อมูลเพิ่มเติม อ่านได้ที่ https://github.com/typestack/routing-controllers/issues/200
No comments:
Post a Comment