پشتیبانی از HTTPS برای وبسایتتان گام مهمی برای محافظت از سایت و کاربرانتان دربرابر حمله است، اما محتوای مختلط میتواند این محافظت را بیفایده کند. همانطور که در محتوای مختلط چیست؟ توضیح داده شده است، مرورگرها محتوای مختلط ناامن را بهطور فزایندهای مسدود خواهند کرد.
در این راهنما، تکنیکها و ابزارهایی را برای رفع مشکلات محتوای مختلط موجود و جلوگیری از وقوع مشکلات جدید نشان خواهیم داد.
پیدا کردن محتوای مختلط با بازدید از سایت شما
هنگام بازدید از صفحه HTTPS در Google Chrome، مرورگر محتوای مختلط را بهصورت خطا و هشدار در کنسول جاوا اسکریپت به شما هشدار میدهد.
در محتوای مختلط چیست؟، میتوانید چند نمونه را ببینید و نحوه گزارش شدن مشکلات را در Chrome DevTools مشاهده کنید.
نمونهای از محتوای مختلط غیرفعال هشدارهای زیر را ارائه میدهد.
اگر مرورگر بتواند محتوا را در نشانی وب https پیدا کند، بهطور خودکار آن را ارتقا میدهد و سپس پیامی نشان میدهد.
محتوای مختلط فعال مسدود میشود و هشدار نمایش داده میشود.
اگر هشدارهایی مانند اینها برای http:// نشانی وب در سایتتان پیدا کردید،
باید آنها را در منبع سایتتان برطرف کنید.
بهتر است فهرستی از این نشانیهای وب بههمراه صفحهای که آنها را در آن پیدا کردهاید تهیه کنید تا هنگام اصلاح آنها از این فهرست استفاده کنید.
پیدا کردن محتوای مختلط در سایت شما
میتوانید محتوای مختلط را مستقیماً در کد منبعتان جستجو کنید.
http:// را در منبعتان جستجو کنید و برچسبهایی را که شامل مشخصههای نشانی وب HTTP هستند پیدا کنید.
توجه داشته باشید که وجود http:// در مشخصه href برچسبهای لنگر (<a>)
اغلب مشکل محتوای مختلط نیست، بهجز چند استثنای قابلتوجه که بعداً به آنها پرداخته میشود.
اگر سایتتان بااستفاده از سیستم مدیریت محتوا منتشر شده است، ممکن است هنگام انتشار صفحهها، پیوندهایی به نشانیهای وب ناامن درج شود. برای مثال، تصاویر ممکن است با نشانی وب کامل بهجای مسیر مرتبط اضافه شوند. باید این موارد را در محتوای CMS پیدا و اصلاح کنید.
رفع مشکل محتوای ترکیبی
وقتی محتوای مختلط را در منبع سایتتان پیدا کردید، میتوانید این مراحل را برای رفع آن دنبال کنید.
اگر پیامی در کنسول دریافت کردید مبنی بر اینکه درخواست منبع بهطور خودکار از HTTP به HTTPS ارتقا یافته است،
میتوانید با اطمینان خاطر نشانی وب http:// را برای منبع در کدتان به https:// تغییر دهید.
همچنین میتوانید با تغییر دادن http:// به https:// در نوار نشانی وب مرورگر و تلاش برای باز کردن نشانی وب در زبانه مرورگر،
بررسی کنید که آیا منبع بهطور ایمن دردسترس است یا نه.
اگر منبع ازطریق https:// دردسترس نیست، باید یکی از گزینههای زیر را درنظر بگیرید:
- منبع را از میزبان دیگری اضافه کنید، اگر دردسترس است.
- اگر ازنظر قانونی مجاز هستید، محتوا را مستقیماً در سایت خودتان بارگیری و میزبانی کنید.
- منبع را کلاً از سایتتان حذف کنید.
پساز رفع مشکل، صفحهای را که در آن خطا را پیدا کرده بودید مشاهده کنید و مطمئن شوید که خطا دیگر نمایش داده نمیشود.
مراقب استفاده از برچسب غیراستاندارد باشید
مراقب استفاده از برچسب غیراستاندارد در سایتتان باشید.
برای مثال، نشانیهای وب برچسب لنگر (<a>) منجر به خطاهای محتوای مختلط نمیشوند،
زیرا باعث میشوند مرورگر به صفحه جدیدی برود.
این یعنی معمولاً نیازی به اصلاح ندارند.
اما برخیاز اسکریپتهای گالری تصویر عملکرد برچسب <a> را لغو میکنند و منبع HTTP مشخصشده توسط ویژگی href را در نمایش لایتباکس در صفحه بار میکنند،
که باعث مشکل محتوای مختلط میشود.
مدیریت محتوای ترکیبی در مقیاس بزرگ
مراحل دستی بالا برای وبسایتهای کوچکتر بهخوبی کار میکند؛ اما برای وبسایتهای بزرگ یا سایتهایی که تیمهای توسعه جداگانه زیادی دارند، پیگیری همه محتوایی که بار میشود میتواند دشوار باشد. برای کمک به این کار، میتوانید از خطمشی امنیتی محتوا استفاده کنید تا به مرورگر دستور دهید درباره محتوای مختلط به شما اطلاع دهد و مطمئن شوید صفحههایتان هرگز منابع ناامن را بهطور غیرمنتظره بار نمیکنند.
خطمشی امنیتی محتوا
خطمشی امنیتی محتوا (CSP) یک ویژگی چندمنظوره مرورگر است که میتوانید از آن برای مدیریت محتوای مختلط در مقیاس بزرگ استفاده کنید. از سازوکار گزارشدهی CSP میتوان برای ردیابی محتوای مختلط در سایتتان استفاده کرد، و خطمشیهای اجرایی را برای محافظت از کاربران با ارتقا دادن یا مسدود کردن محتوای مختلط ارائه کرد.
میتوانید این ویژگیها را برای صفحهای با گنجاندن
سرصفحه Content-Security-Policy یا Content-Security-Policy-Report-Only در پاسخ ارسالشده از سرورتان فعال کنید.
علاوهبراین، میتوانید Content-Security-Policy را
(البته نه Content-Security-Policy-Report-Only) بااستفاده از برچسب <meta> در بخش <head> صفحهتان تنظیم کنید.
یافتن محتوای مختلط با خطمشی امنیتی محتوا
میتوانید از خطمشی امنیتی محتوا برای جمعآوری گزارشهای محتوای مختلط در سایتتان استفاده کنید.
برای فعال کردن این ویژگی، دستورالعمل Content-Security-Policy-Report-Only را با افزودن آن بهعنوان سرصفحه پاسخ برای سایتتان تنظیم کنید.
سرایند پاسخ:
Content-Security-Policy-Report-Only: default-src https: 'unsafe-inline' 'unsafe-eval'; report-uri https://example.com/reportingEndpoint
هرگاه کاربری از صفحهای در سایت شما بازدید میکند،
مرورگر او گزارشهایی با قالب JSON درباره هر چیزی که خطمشی امنیتی محتوا را نقض میکند به
https://example.com/reportingEndpoint ارسال میکند.
در این مورد، هرزمان که زیرمنبعی ازطریق HTTP بار شود، گزارشی ارسال میشود.
این گزارشها شامل نشانی وب صفحهای که نقض خطمشی در آن رخ داده است و نشانی وب زیرمنبعی که خطمشی را نقض کرده است میشود.
اگر نقطه پایانی گزارشدهیتان را برای ثبت این گزارشها پیکربندی کنید،
میتوانید محتوای مختلط را در سایتتان بدون بازدید از هر صفحه بهطور جداگانه ردیابی کنید.
دو هشدار در این مورد وجود دارد:
- کاربران باید از صفحهتان در مرورگری بازدید کنند که سرصفحه CSP را درک کند. این موضوع برای اکثر مرورگرهای نو صادق است.
- فقط برای صفحههایی که کاربران شما بازدید کردهاند گزارش دریافت میکنید. بنابراین اگر صفحههایی دارید که ترافیک زیادی ندارند، ممکن است مدتی طول بکشد تا گزارشهای کل سایتتان را دریافت کنید.
راهنمای خطمشی امنیت محتوا اطلاعات بیشتر و نمونه نقطه پایانی دارد.
جایگزینهای گزارشدهی با CSP
اگر سایتتان توسط پلاتفرمی مانند Blogger برای شما میزبانی میشود، ممکن است به اصلاح سرصفحهها و افزودن CSP دسترسی نداشته باشید. درعوض، یک جایگزین مناسب میتواند استفاده از خزنده وبسایت برای یافتن مشکلات در سراسر سایت شما باشد، مانند HTTPSChecker یا Mixed Content Scan.
درحال ارتقا دادن درخواستهای ناامن
مرورگرها درحال ارتقا دادن و مسدود کردن درخواستهای ناامن هستند. میتوانید از دستورالعملهای CSP برای اجبار به ارتقای خودکار یا مسدود کردن این داراییها استفاده کنید.
دستور upgrade-insecure-requests
«خطمشی امنیتی محتوا» به مرورگر دستور میدهد تا قبلاز ایجاد درخواستهای شبکه، نشانیهای وب ناامن را ارتقا دهد.
بهعنوان مثال، اگر صفحهای حاوی برچسب تصویر با نشانی وب HTTP باشد، مانند
<img src="https://example.com/image.jpg">
درعوض، مرورگر درخواست امنی برای
https://example.com/image.jpg ایجاد میکند و درنتیجه کاربر را از محتوای مختلط نجات میدهد.
میتوانید این رفتار را با ارسال سرصفحه Content-Security-Policy با این دستورالعمل فعال کنید:
Content-Security-Policy: upgrade-insecure-requests
یا با جاسازی همان دستورالعمل بهصورت درونخطی در بخش <head>
سند بااستفاده از عنصر <meta>:
<meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests">
همانند ارتقای خودکار مرورگر، اگر منبع ازطریق HTTPS دردسترس نباشد،
درخواست ارتقایافته ناموفق میشود و منبع بار نمیشود.
این کار امنیت صفحهتان را حفظ میکند. دستورالعمل upgrade-insecure-requests فراتر از ارتقای خودکار مرورگر خواهد رفت،
و تلاش میکند درخواستهایی را که مرورگر درحالحاضر ارتقا نمیدهد ارتقا دهد.
دستورالعمل upgrade-insecure-requests بهصورت آبشاری به اسناد <iframe> اعمال میشود،
و تضمین میکند که کل صفحه محافظت شود.