اگه برای sanitize و بررسی valid بودن ورودیها از class-validator استفاده میکنید، دقت کنید که نسبت به XSS و SQL_Injection آسیبپذیره.
امروز که برای یک پروژه NestJSی میخواستم ازش استفاده کنم تو مستنداتش تابعی مرتبط با جلوگیری از این دو آسیبپذیری پیدا نکردم، اول فکر کردم شاید Built-in داره این کارو میکنه... (ولی اینطور نبود)
یه پارامتر به اسم forbidUnknownValues داره که اگه trueش کنی تا حدودی جلوی این دو آسیبپذیری رو میگیره (فقط تا حدودی)
در مورش سرچ کردم، SNYK-ID هم گرفته حدودا 6 ماه پیش، ولی با این حال این مشکل هنوز برطرف نشده...! (در حال حاضر ورژنش v0.13.2)، فقط ظاهرا 6 ماه پیش به forbidUnknownValues تو مستندات اشارهای نشده بوده ولی الان تو مستندات اوردنش با این توضیح که بهتره true بشه.
چند لینک مرتبط با این موضوع:
https://github.com/typestack/class-validator/issues/1422
https://nvd.nist.gov/vuln/detail/CVE-2019-18413
----
این پست رو لینکدین هم گذاشته بودم، اونجا یه سوال پرسیدن که چون سوال خوبی بود گفتم اینجا هم بذارمش:
متن سوال:
خود nest جلو xss رو نمیگیره؟ یا اگه اون پکیج Helmet رو با nest تلفیق کنیم کارساز نیست؟
از اونجایی که XSS یه آسیبپذیری Client-sideه، پس Nest نمیتونه تاثیر خاصی برای جلوگیری از این آسیبپذیری داشته باشه.
در خصوص helmet، فقط میاد یکسری header اضافه میکنه و خودشم توضیح داده که:
It's not a silver bullet, but it can help
اینم باید در نظر بگیریم که خیلی وقتا آسیبپذیریها به صورت chain شدهان و ممکنه خودشون به تنهایی تو پروژه ما هیچ خطری نداشته باشن، ولی موقعی که با هم ترکیب میشن باعث آسیبپذیری میشن، مثلا خیلی ها دیدم میگن پروژمون TokenBaseه و توکن هم گذاشتیم تو LocalStorage یا مثلا میگن کوکی هارو HttpOnly گذاشتیم پس قطعا مشکلی از نظر XSS نیست!! در صورتی که XSS مثل اینه که دسترسی به کنسول Browser داریم، با کنسول چه کارایی میشه انجام داد؟ با XSS هم میشه... (برای طولانی نشدن پست توضیح در خصوص CSP رو اینجا نیاوردم)
در خصوص XSS خلاصه کار اینه که روی ورودی ها و خروجیها کنترل داشته باشیم، حالا چون این وسط احتمال bypass وجود داره پس بهتره در کنارش چیزای دیگه هم رعایت کنیم.
شاد و موفق باشین...