it-swarm.asia

كيفية السماح بمحتوى http في إطار iframe على موقع https

أقوم بتحميل بعض HTML في إطار iframe ولكن عندما يستخدم الملف المشار إليه http ، وليس https ، أتلقى الخطأ التالي:

[محظور] الصفحة في {current_pagename} شغّلت محتوى غير آمن من {reference_filename}

هل هناك أي طريقة لإيقاف هذا أو أي طريقة للالتفاف حوله؟

لا يحتوي iframe على سمة src ويتم تعيين المحتويات باستخدام:

frame.open();
frame.write(html);
frame.close();
127
georgephillips

بناءً على عمومية هذا السؤال ، أعتقد أنك ستحتاج إلى إعداد وكيل HTTPS الخاص بك على بعض الخوادم عبر الإنترنت. قم بالخطوات التالية:

  • تحضير الخادم الوكيل - تثبيت IIS ، Apache
  • الحصول على شهادة SSL صالحة لتجنب أخطاء الأمان (خالية من startsl.com على سبيل المثال)
  • اكتب مجموعة ، والتي ستقوم بتنزيل محتوى غير آمن (كيف أدناه)
  • من موقعك/تطبيق get https://yourproxy.com/؟page=http://insecurepage.com

إذا قمت ببساطة بتنزيل محتوى الموقع عن بعد عبر file_get_contents أو ما شابه ذلك ، فلا يزال بإمكانك الحصول على روابط غير آمنة للمحتوى. سيكون عليك العثور عليها باستخدام regex واستبدالها أيضًا. من الصعب حل الصور ، ولكن ar وجدت حلاً هنا: http://foundationphp.com/tutorials/image_proxy.php

25
panpernicek

ملاحظة: في حين أن هذا الحل قد يكون ناجحًا في بعض المتصفحات عندما تم كتابته في عام 2014 ، إلا أنه لم يعد يعمل. لا تسمح المتصفحات الحديثة بالتنقل أو إعادة التوجيه إلى عنوان URL HTTP في iframe مضمن في صفحة HTTPS ، حتى إذا بدأ الإطار بعنوان URL HTTPS.

أفضل حل قمت بإنشائه هو ببساطة استخدام google كبديل ssl ...

https://www.google.com/search?q=%http://yourhttpsite.com&btnI=Im+Feeling+Lucky

اختبارها ويعمل في فايرفوكس.

أساليب أخرى:

  • استخدم طرفًا ثالثًا مثل embed.ly (ولكنه جيد جدًا فقط لواجهة برمجة تطبيقات HTTP المعروفة).

  • قم بإنشاء البرنامج النصي لإعادة التوجيه الخاص بك على صفحة https التي تتحكم فيها (يجب أن تؤدي عملية إعادة توجيه جافا سكريبت البسيطة على صفحة مرتبطة نسبيًا الحيل. شيء مثل: (يمكنك استخدام أي طريقة/طريقة)

    https://example.com يحتوي على iframe يرتبط بـ ...

    https://example.com/utilities/redirect.html الذي يحتوي على نص بسيط لإعادة توجيه js مثل ...

    document.location.href ="http://thenonsslsite.com";

  • بدلاً من ذلك ، يمكنك إضافة موجز RSS أو كتابة بعض القارئ/المحلل اللغوي لقراءة موقع http وعرضه داخل موقع https.

  • يمكنك/ينبغي أيضًا أن توصي مالك موقع http بإنشاء اتصال ssl. إذا لسبب آخر غير فإنه يزيد سيو .

ما لم يكن بإمكانك الحصول على مالك موقع http لإنشاء شهادة ssl ، فإن الحل الأكثر أمانًا ودائمًا يتمثل في إنشاء موجز RSS يستوعب المحتوى الذي تحتاجه (من المفترض أنك لا تفعل فعلًا أي شيء على موقع http - وهذا يعني قل لا تسجيل الدخول إلى أي نظام).

المشكلة الحقيقية هي أن وجود عناصر http داخل موقع https يمثل مشكلة أمان. لا توجد طرق موافق للشريعة اليهودية تمامًا للتغلب على هذا الخطر الأمني ​​، لذلك ما سبق هو مجرد حل حول العمل الحالي.

لاحظ أنه يمكنك تعطيل مقياس الأمان هذا في معظم المتصفحات (بنفسك ، وليس للآخرين). لاحظ أيضًا أن هذه "الاختراقات" قد تصبح قديمة مع مرور الوقت.

124
Matthew Peters

أعرف أن هذا منشور قديم ، ولكن هناك حل آخر يتمثل في استخدام cURL ، على سبيل المثال:

redirect.php:

<?php
if (isset($_GET['url'])) {
    $url = $_GET['url'];
    $ch = curl_init();
    $timeout = 5;
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
    $data = curl_exec($ch);
    curl_close($ch);
    echo $data;
}

ثم في علامة iframe ، شيء مثل:

<iframe src="/redirect.php?url=http://www.example.com/"></iframe>

هذا مجرد مثال MINIMAL لتوضيح الفكرة - فهو لا يعقم عنوان URL ، كما أنه لن يمنع أي شخص آخر من استخدام redirect.php لأغراضهم الخاصة. النظر في هذه الأشياء في سياق موقعك الخاص.

لكن الاتجاه الصعودي هو أنه أكثر مرونة. على سبيل المثال ، يمكنك إضافة بعض التحقق من صحة بيانات $ curl'd للتأكد من أنها في الحقيقة ما تريد قبل عرضها - على سبيل المثال ، اختبار للتأكد من أنها ليست 404 ، ولديك محتوى بديل خاص بك إذا كان هو.

زائد - أنا متعب قليلاً من الاعتماد على إعادة توجيه جافا سكريبت لأي شيء مهم.

في صحتك!

25
David R.

أضف <meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests"> في الرأس

المرجع: http://thehackernews.com/2015/04/disable-mixed-content-warning.html

توافق المتصفح: http://caniuse.com/#feat=upgradeinsecurerequests

8
user2523022

ستحصل دائمًا على تحذيرات من المحتوى المحظور في معظم المتصفحات عند محاولة عرض محتوى غير آمن على صفحة https. هذا أمر صعب إذا كنت ترغب في تضمين أشياء من مواقع أخرى لا تقف وراء ssl. يمكنك إيقاف التحذيرات أو إزالة الحظر في المتصفح الخاص بك ولكن بالنسبة للزوار الآخرين ، فهذه مشكلة.

إحدى طرق القيام بذلك هي تحميل جانب خادم المحتوى وحفظ الصور والأشياء الأخرى على الخادم وعرضها من https.

يمكنك أيضًا تجربة استخدام خدمة مثل embed.ly والحصول على المحتوى من خلالها. لديهم دعم للحصول على المحتوى وراء https.

7
Addeladde

استخدام Google كبروكسي SSL لا يعمل حاليًا ،

لماذا ا؟

إذا قمت بفتح أي صفحة من google ، فستجد أن هناك حقل x-frame-options في الرأس.  Google response header

يمكن استخدام رأس استجابة HTTP X-Frame-Options للإشارة إلى ما إذا كان يجب السماح للمستعرض بعرض صفحة في <frame> أو <iframe> أو <object> أم لا. يمكن للمواقع استخدام هذا لتجنب هجمات نقر الجرات ، من خلال ضمان عدم تضمين محتواها في مواقع أخرى.

(اقتباس من MDN)

واحد من الحل

فيما يلي عملي حول هذه المشكلة:

قم بتحميل المحتوى إلى AWS S3 ، وسوف ينشئ رابط https للمورد.
إشعار: اضبط الإذن على ملف html للسماح للجميع بعرضه.

بعد ذلك ، يمكننا استخدامه كـ src iframe في مواقع https.  AWS

5
David Guan

يمكنك محاولة الغاء كل ما تريده باستخدام PHP أو لغة خادم أخرى ، ثم وضع iframe على المحتوى المحشوش. إليك مثال مع PHP:

scrapedcontent.php:

<?php
$homepage = file_get_contents('http://www.example.com/');
echo $homepage;
?>

index.html و:

<iframe src="scrapedcontent.php"></iframe>
2
Grant

إذا كان الأمر يتعلق ببضعة عناوين URL ونادراً ما يتم تغييرها لتضمينها في iframe ، فيمكنك إعداد وكيل SSL لهذا على الخادم الخاص بك وتكوينه بحيث يعيّن عنوان URL https على الخادم الخاص بك إلى URL http واحد على الخادم الوكيل.

على سبيل المثال ، كنت أتطلع إلى ngrok و mitmproxy لهذا ، لأنها صغيرة وبسيطة التكوين (على الرغم من أنها عادة ما تكون مخصصة لأغراض مختلفة قليلاً).

1
tanius