𝗥𝗲𝗮𝗰𝘁 𝘃𝘀. 𝗫𝗦𝗦: 𝗪𝗵𝗲𝗿𝗲 𝘁𝗵𝗲 𝗚𝘂𝗮𝗿𝗱𝗿𝗮𝗶𝗹𝘀 𝗘𝗻𝗱
React بهصورت پیشفرض امن است. این کتابخانه مقادیر را در JSX escape میکند تا از اکثر تزریقهای اسکریپت (script injections) جلوگیری کند. اما این موضوع یک احساس امنیت کاذب ایجاد میکند. React ریسک XSS را کاهش میدهد، اما آن را از بین نمیبرد.
سه نوع اصلی از حملات XSS وجود دارد:
- Reflected XSS: مهاجم یک لینک مخرب ارسال میکند. سرور بلافاصله اسکریپت را به کاربر بازمیگرداند. مرورگر اسکریپت را اجرا میکند زیرا به نظر میرسد از یک سایت قابل اعتماد آمده است.
- Stored XSS: مهاجم یک اسکریپت را در سرور شما ذخیره میکند. این اسکریپت در پایگاه داده، کامنتها یا لاگهای شما باقی میماند. هر کاربری که آن محتوا را مشاهده کند، اسکریپت را اجرا میکند.
- DOM Based XSS: حمله کاملاً در مرورگر رخ میدهد. مهاجم پارامترهای URL یا ورودیهای سمت کلاینت را تغییر میدهد تا رفتار جاوااسکریپت شما را مختل کند.
React واقعاً از چه چیزی در برابر شما محافظت میکند؟
- Automatic Escaping: React با رشتهها (strings) مانند متن ساده برخورد میکند. اگر سعی کنید یک تگ اسکریپت را به JSX تزریق کنید، React به جای اجرای کد، متن را نمایش میدهد.
- Safe Rendering: React نحوه نمایش محتوا را مدیریت میکند. این کار نیاز شما به استفاده از APIهای خطرناک مرورگر را کاهش میدهد.
- Less DOM Manipulation: React بهروزرسانیها را مدیریت میکند. دیگر نیازی نیست به دفعات زیاد از
document.write()یاinnerHTMLاستفاده کنید.
React راههایی برای خروج از این محدودیتها (escape hatches) فراهم میکند. اگر از آنها به اشتباه استفاده کنید، آسیبپذیری ایجاد خواهید کرد.
مراقب این اشتباهات باشید:
dangerouslySetInnerHTML: این ویژگی به React میگوید که از فرآیند escaping صرفنظر کند. این ویژگی HTML را دقیقاً همانطور که هست درج میکند. اگر محتوا پاکسازی نشده باشد، مهاجم پیروز میشود. ابتدا از DOMPurify برای پاکسازی (sanitize) محتوای خود استفاده کنید.- Direct DOM Manipulation: اگر از
element.innerHTMLهمراه با ورودی کاربر استفاده کنید، تمام امنیت React را دور میزنید. - Third Party Libraries: برخی از ابزارهای خارجی ممکن است از همان قوانین امنیتی پیروی نکنند.
React ابزارهای لازم برای امنیت را فراهم میکند. شما باید از آنها به درستی استفاده کنید. امنیت مسئولیت شماست.
Source: https://dev.to/ayomidejhay/react-vs-xss-where-the-guardrails-end-6p2