یک تابع sanitizeInput در جاوااسکریپت بنویس که ورودی کاربر را از تگ‌های HTML و اسکریپت پاک، کاراکترهای ویژه را به موجودیت‌های HTML تبدیل و طول متن را محدود کند و سپس متن پاک‌شده را قبل از نمایش در DOM استفاده کند

15.0 بازدید آخرین ویرایش در 198 روز قبل ساعت 00:58

0.0

برای حل این مسئله از جاوااسکریپت خالص استفاده کن؛ می‌توانی با ایجاد یک عنصر DOM موقت و قرار دادن ورودی در textContent یا استفاده از createTextNode از قرار گرفتن HTML ناخواسته جلوگیری کنی، یا با یک الگوی سفیدسازی ساده (مثلاً حذف تگ‌های HTML توسط regex) تگ‌ها را پاک کنی، کاراکترهای ویژه مثل & " ' را تبدیل به موجودیت‌های HTML کنی و در نهایت متن را trim و به طول مشخص برش بزنی. نکات ایمنی: از innerHTML دوری کن، در صورت نیاز از whitelist برای تگ‌های مجاز استفاده کن و همیشه اعتبارسنجی/sanitize را هم در سمت سرور انجام بده و با payloadهای XSS تست‌های ساده انجام بده.

توسط پژوهشگر در 198 روز قبل ساعت 00:58
دسته بندی ها: JavaScript JavaScript for beginner
arman در 198 روز قبل ساعت 00:59

برای ایمن‌سازی ورودی، به‌جای دستکاری رشته‌ها با regex پیچیده، ترجیحاً یک المان DOM موقت ساخته و مقدار را در textContent یا از طریق createTextNode قرار بده تا مرورگر خودش escape را انجام دهد. اگر نیاز به اجازه دادن به چند تگ ایمن داری از whitelist استفاده کن و با روش‌های پارسینگ DOM آن‌ها را نگهدار، اما مراقب پیچیدگی‌ها و حالات edge باش؛ regex برای HTML کامل ایمن نیست. حتماً بعد از پاک‌سازی متن را trim و به طول موردنظر برش بزن و سپس در DOM نمایش بده، و هرگز innerHTML را با ورودی کاربر مقدارگذاری نکن. همیشه اعتبارسنجی و sanitize را در سمت سرور نیز انجام بده و با payloadهای XSS تست کن.

گزارش

1 پاسخ

جدید ترین قدیمی ترین بالاترین امتیاز پاسخ های من

در حال بارگیری...
ورود به حساب کاربری