สมมติว่า เรามี 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