iframe ایمبیڈ چیکر

مفت آن لائن ifram چیکر: کسی بھی ویب پیج کا URL درج کریں تاکہ اس کے X-Frame-Options اور Content-Security-Policy frame-ancestors ہیڈرز کا معائنہ کیا جا سکے، یہ معلوم کریں کہ کیا پیج ifram میں اینبڈ ہو سکتا ہے، اور لائیو پریویو کے ساتھ تصدیق کریں۔ تاریخ موجودہ براؤزر سییشن کے لیے محفوظ رہتی ہے۔

ifram اینبیڈنگ چیک

:

ہر لائن کو اسی ہیڈر چیک سے گزارا جاتا ہے اور اسے نیچے دیے گئے سیشن ہیٹری میں شامل کر دیا جاتا ہے۔ فی بچ 20 URLs تک محدود ہے، ہدف سائٹس کے احترام میں چند ایک وقت میں چیک کیا جاتا ہے۔

چیک شدہ: /
URL نتیجہ HTTP

لائو پریویو

ہیڈرز کا تجزیہ ایک تیز ابتدائی قدم ہے، مگر یہ جیساکرپٹ فريم بسٹنگ نہیں دیکھ سکتا: اگر ہیڈرز "قابليِ اينبيڈ" بتائیں مگر پريويو خالي رہے، باہر نکل جائے، يا ارير پيج دکهاىے، تو پيج محفوظ طريقے سے اينبيڈ نہيں ہو سكتا۔ لايو پريويو حتمي فيصلہ ہے۔

تاریخ (اس سییشن کی)

یہ صرف اس ٹیب میں محفوظ ہوتا ہے (sessionStorage)؛ ٹیب بند کرنے پر خود بخود صاف ہو جاتا ہے۔ سرور کو کوئی ڈیٹا ارسال نہیں کیا جاتا۔

اس سییشن میں ابھی تک کوئی چیک نہیں کیا گیا۔

یہ چیک کس طرح کام کرتا ہے؟

  1. ہدف URL درج کریں اور 'Check' پر کلک کریں۔ سرور پیج کو ایک اصلی ifram ریکویسٹ کی شکل میں فetcہ کرتا ہے (Sec-Fetch-Dest: iframe سمیت) اور اس کے رسپانس ہیڈرز پڑھتا ہے۔
  2. فیصلہ X-Frame-Options (DENY / SAMEORIGIN فریمنگ کو روکتے ہیں) اور Content-Security-Policy frame-ancestors (صرف * یا سکیم وائلڈ کارڈ تھرڈ پارنٹس کو اجازت دیتے ہیں) کی بنیاد پر دیا جاتا ہے۔
  3. لائو پریویو ifram میں وہی URL لوڈ کیا جاتا ہے تاکہ آپ تصدیق کر سکیں کہ براؤزر دراصل کیا کر رہا ہے، بشمول جیساکرپٹ فريم بسٹنگ جو ہیڈرز ظاہر نہیں کر سکتے۔

کیا طے کرتا ہے کہ کیا کوئی پیج اینبڈ ہو سکتا ہے؟

کہ آیا ایک ویب پیج کسی دیگر سائٹ پر `<iframe>` کے اندر دکھایا جا سکتا ہے، اس کا فیصلہ براؤزر کرتا ہے، جو اس صفحے خود بھیجے گئے رسپانس ہیڈرز کی بنیاد پر ہوتا ہے۔ یہ چیکنر اسی جانچ کو سرور سائیڈ پر انجام دیتا ہے اور آپ کو فوراً نتیجہ بتاتا ہے۔

`X-Frame-Options` روایتی ہیڈر ہے: `DENY` ہر صفحے پر فریمنگ منع کرتا ہے، `SAMEORIGIN` صرف یکساں اوریجن والے صفحات کو فریم کرنے کی اجازت دیتا ہے، اور `ALLOW-FROM` جدید براؤزرز میں ہٹا دیا گیا ہے۔ جب یہ ہیڈر غائب ہو تو قدیم قوانین فریمنگ کو روکتے نہیں ہیں۔

`Content-Security-Policy frame-ancestors` جدید متبادل ہے۔ یہ ان اوریجنز کی فہرست ہوتا ہے جو پیج کو ایمبیڈ کرنے کی مجاز ہیں — مثال کے طور پر `frame-ancestors 'self' https://example.com`۔ `*` (یا محض `https:` جیسی اسکیم) کی قدر کسی بھی HTTPS والد (parent) کو اجازت دیتی ہے؛ اس سے تنگ تر کوئی بھی چیز تھرڈ پارٹی ایمبیڈنگ کو بلاک کر دے گی۔

ہیڈرز کہانی کے تمام پہلو نہیں ہیں: پیج اسکرپٹس فریم باسٹنگ کوڈ چلا سکتے ہیں (`top !== self` موازنہ کر کے اور ٹاپ لیول نیویگیشن پر زور دے کر)، اور لاگ ان صفحات یا جغرافیائی پابندی والے اینڈ پوائنٹس ڈیٹا سینٹر درخواستوں کے لیے مختلف رویہ اپنا سکتے ہیں۔ اسی لیے ہر نتیجے کے ساتھ لائیو پریویو بھی فراہم کیا جاتا ہے۔

فوری رہنمائی: رسپانس ہیڈر کی ترتیب

اگر آپ اس سائٹ کے مالک ہیں، تو رسپانس ہیڈرز کے ذریعے فریمنگ کو براہ راست کنٹرول کریں۔

کسی بھی صفحے سے ایمبیڈنگ بلاک کریں

X-Frame-Options: DENY Content-Security-Policy: frame-ancestors 'none'

براؤزر کسی بھی `<iframe>` میں اس صفحے کو ظاہر کرنے سے انکار کر دیتے ہیں — یہ کلک جیکنگ کے خلاف سخت ترین حفاظتی اقدام ہے۔

صرف یکساں اوریجن والی ایمبیڈنگ کی اجازت دیں

X-Frame-Options: SAMEORIGIN Content-Security-Policy: frame-ancestors 'self'

صرف وہی صفحات جو ایک ہی اسکیم، ہوسٹ اور پورٹ رکھتے ہوں اسے فریم میں ڈال سکتے ہیں؛ تھرڈ پارٹی سائٹس بلاک کردی جائیں گی۔

صرف مخصوص اوریجنز کی اجازت دیں

Content-Security-Policy: frame-ancestors 'self' https://trusted.example.com

`frame-ancestors` میں معتبر اوریجنز کی فہرست درج کریں؛ جن کی فہرست میں شامل نہیں وہ بلاک ہو جائیں گے۔

کسی بھی صفحے سے ایمبیڈنگ کی اجازت دیں

X-Frame-Options سیٹ نہ کریں Content-Security-Policy: frame-ancestors *

کوئی بھی سائٹ اس صفحے کو `<iframe>` میں رکھ سکتی ہے۔ سیکیورٹی کے فوائد اور نقصانات کا جائزہ ضرور لیں۔

نوٹ: CSP کا `frame-ancestors` اب `X-Frame-Options` کی جگہ لے چکا ہے۔ جب دونوں موجود ہوں تو CSP ترجیح دی جاتی ہے — `frame-ancestors` استعمال کریں۔

سرور کیسے پہچانتا ہے کہ کوئی درخواست ifram سے آئی ہے؟

تقریباً 2020 سے کرومیم اور فائر فاکس پر مبنی براؤزرز خود بخود ہر نیویگیشن اور سب ریسورس درخواست کے ساتھ فچ میٹا ڈیٹا ری کوئسٹ ہیڈرز کا ایک سیٹ منسلک کر دیتے ہیں۔ فریمنگ چیکز کے لیے سب سے مفید `Sec-Fetch-Dest` ہے — یہ سرور کو بتاتا ہے کہ کس قسم کے سیاق و سباق (context) نے ریسورس کی درخواست کی، بغیر کسی تعاون کے درخواستی صفحے کے۔

  • Sec-Fetch-Dest: document — ٹاپ لیول نیویگیشن، کسی بھی فریم کے اندر نہیں۔
  • Sec-Fetch-Dest: iframe — یہ درخواست `<iframe>` عنصر کے اندر لوڈ ہوتی ہے۔
  • Sec-Fetch-Dest: frame — پرانے `<frame>` (فریم سیٹ) کے اندر لوڈ ہوتا ہے۔
  • Sec-Fetch-Dest: embed / object — `<embed>` یا `<object>` عنصر کے اندر لوڈ ہوتا ہے۔

یہ چیکر اپنا پراب `Sec-Fetch-Dest: iframe` ہیڈر کے ساتھ بھیجتا ہے، جو کہ کسی اصلی براؤزر کی طرف سے کسی صفحے کو embed کرنے کے دوران بھیجے جانے والے بالکل یکساں ڈیٹا کی نقل ہوتا ہے۔ لہٰذا اس کا نتیجہ اس بات کا عکس بنتا ہے کہ ٹارگٹ سرور حقیقی `iframe` ریکویسٹس پر کیسے برتاؤ کرتا ہے، نہ کہ کسی عام HTTP fetch پر۔

`Sec-Fetch-Dest` ایک مفید اشارہ تو ہے لیکن سیکیورٹی کا معیار نہیں: یہ صرف جدید براؤزرز بھیجتے ہیں، جبکہ غیر براؤزر کلائنٹس — مثلاً curl، بوٹس، بعض ویب ووز (webviews) اور پرانے براؤزرز — اسے مکمل طور پر چھوڑ سکتے ہیں یا کوئی بھی حسبِ خواہش قدر بھیج سکتے ہیں۔ سرور کو چاہیے کہ اس کی بنیاد پر لاگنگ یا ریٹ لمیٹنگ کا فیصلہ کرے، مگر فریمنگ کی اجازت کے بارے میں صرف اسی پر انحصار نہیں کرنا چاہیے؛ یہ فیصلہ دراصل `X-Frame-Options` اور `CSP frame-ancestors` پر منحصر ہے، جنہیں براؤزرز درخواست کے ہیڈرز سے آزادانہ طور پر نافذ کرتے ہیں۔

کلائنٹ سائیڈ پر، کوئی بھی صفحہ بغیر کسی ہیڈر کے بھی یہ محسوس کر سکتا ہے کہ وہ کسی فریم کے اندر چل رہا ہے، مثلاً `window.top !== window.self` کے موازنے سے (یا سین اوپوجین فریمز کے لیے `window.frameElement` پڑھ کر)۔ اس کے بعد وہ مناسب ردعمل ظاہر کر سکتا ہے — جیسے وارننگ دکھانا یا ٹاپ لیول ریڈائریکٹ کروانا۔ یہ وہی فریم بَسٹنگ (frame-busting) تکنیک ہے جو پہلے بیان کی گئی تھی، اور یہ درخواست کے ہیڈرز میں کیا بھی موجود ہو، مستقل طور پر کام کرتی ہے۔

سرور کنفیگ مثالیں: ifram اینبیڈنگ بلاک کریں

ذیل کے کوڈ سنیپٹس دکھاتے ہیں کہ ہر سرور یا فریم ورک کو کیسے ترتیب دیں تاکہ `iframe` ایمبیڈنگ مکمل طور پر بلاک ہو جائے (X-Frame-Options: DENY + CSP frame-ancestors 'none') — یہ اوپر دی گئی فوری رہنمائی کے تمام طریقوں میں سب سے سخت قدم ہے۔

server {
    location / {
        add_header X-Frame-Options "DENY" always;
        add_header Content-Security-Policy "frame-ancestors 'none'" always;
    }
}
<IfModule mod_headers.c>
    Header always set X-Frame-Options "DENY"
    Header always set Content-Security-Policy "frame-ancestors 'none'"
</IfModule>
app.use((req, res, next) => {
  res.setHeader('X-Frame-Options', 'DENY');
  res.setHeader('Content-Security-Policy', "frame-ancestors 'none'");
  next();
});
// next.config.js
module.exports = {
  async headers() {
    return [
      {
        source: '/:path*',
        headers: [
          { key: 'X-Frame-Options', value: 'DENY' },
          { key: 'Content-Security-Policy', value: "frame-ancestors 'none'" },
        ],
      },
    ];
  },
};
class SetFrameOptions
{
    public function handle(Request $request, Closure $next): Response
    {
        $response = $next($request);
        $response->headers->set('X-Frame-Options', 'DENY');
        $response->headers->set('Content-Security-Policy', "frame-ancestors 'none'");

        return $response;
    }
}
export default {
  async fetch(request) {
    const response = await fetch(request);
    const headers = new Headers(response.headers);
    headers.set('X-Frame-Options', 'DENY');
    headers.set('Content-Security-Policy', "frame-ancestors 'none'");
    return new Response(response.body, { status: response.status, headers });
  },
};

صرف اپنے سائٹ یا مختصر اجازت فہرست (allow-list) کو فریم کرنے کی اجازت دینی ہے، باقی سب کو بلاک کرنے کی بجائے؟ `DENY` کو `SAMEORIGIN` اور `'none'` کو `'self'` یا مخصوص اوریجنز کی فہرست سے بدل دیں — باقی ترتیب ویسی ہی رہے گی۔

مشہور پلیٹ فارمز کے احتیاطی نکات

عمومی ہیڈر قوانین کو جانب رکھتے ہوئے، کچھ معروف پلیٹ فارمز کے اپنے مخصوص رویے ہیں — انہیں جان لینا ضروری ہے، اس سے پہلے کہ آپ صرف ہیڈرز کی بنیاد پر یہ فرض کر لیں کہ کوئی چیز "بلکڈ" (blocked) ہے یا "ایمبیڈ ایبل" (embeddable) ہو سکتی ہے۔

پلیٹ فارم / منظرنامہ رویہ وجوہات
یوٹیوب واچ پیج (youtube.com/watch) مسدود متبادل کے طور پر باضابطہ `youtube.com/embed/{id}` پلے یوز استعمال کریں — عام واچ پیج سخت فریم پالیسی بھیجتا ہے۔
گوگل میپس پلیس پیج مسدود صرف میپس ایمبیڈ API کا آئی فریم یوز (google.com/maps/embed) فریمنگ کے لیے مقرر کیا گیا ہے۔
گوگل / مائیکرو سافٹ OAuth لوگن پیجز مسدود 2015 سے جان بوجھ کر بلاک کیا گیا ہے تاکہ iframe کے اندر کرینشل فیشنگ (credential-phishing) کو روکا جا سکے؛ لوگن فلو کو ٹاپ لیول ونڈو یا پاپ اپ میں چلنا ضروری ہے۔
پیمنٹ چیڪ آؤٹ پیجز (Stripe Checkout، PayPal، زیادہ تر بینک گیٹ ویز) مسدود پیمنٹ فارم کو iframe میں ڈالنا کلک جیکنگ (clickjacking) کا کلاسک طریقہ ہے، اس لیے پیمنٹ پروسیسرز اسے براہ مسترد کر دیتے ہیں۔
گیٹ ہب repository / فائل پیجز مسدود سائٹ وائیڈ `frame-ancestors 'none'`؛ iframe کے بجائے REST/GraphQL API یا اسکرین شاٹ استعمال کریں۔
نوٹر / گوگل ڈاکس "Publish to web" پیجز قابلِ انبیڈ خاص طور پر ایمبیڈنگ کے لیے ڈیزائن کیے گئے ہیں، اور پروڈکٹ میں تیار شدہ ایمبیڈ کوڈ فراہم کیا گیا ہے۔
وکیپیڈیا مضامین قابلِ انبیڈ ڈیفالٹ طور پر کوئی محدود `X-Frame-Options`/CSP موجود نہیں ہے، مگر بڑے پیمانے پر انبیڈ کرنے سے پہلے لائسنسنگ اور کارآمد شرطوں کا جائزہ ضرور لیں۔

عام استعمال کے موارد

  • انٹیگریشن کوڈ لکھنے سے پہلے یہ طے کریں کہ آیا کوئی تھर्ड پارٹی وڈجٹ، ڈیش بورڈ، یا دستاویز اپنے پروڈکٹ میں ایمبیڈ کی جا سکتی ہے یا نہیں۔
  • تصدیق کریں کہ آپ کا اپنا سائٹ وہی `X-Frame-Options` یا `CSP frame-ancestors` پالیسی بھیج رہا ہے جس کا آپ ارادہ کرتے ہیں۔
  • کلک جیکنگ تحفظ کی ڈیبگنگ کریں: یہ سمجھنے کے لیے کہ کوئی صفحہ آئی فریم کے اندر about:blank یا کسی انکار کے پیغام کو کیوں دکھا رہا ہے۔
  • مواد جمع کرنے یا پورٹل انضمام کے دوران متعلقہ URLs کو جمع وار اسکریں کریں، اور نتائج کو دوبارہ جانچنے کے لیے سیشن ہسٹری استعمال کریں۔
  • بیرونی ڈیپنڈنسیز (External Dependencies) کی فریمنگ پالیسی کو دستاویز بنا کر سیکیورٹی ریویوز یا پیینیٹریشن ٹیسٹس کے لیے تیاری کریں۔

اکثر پوچھے جانے والے سوالات

پیش نظارہ (Preview) میں وہ صفحہ جو "Embeddable" کے طور پر رپورٹ ہوتا ہے، وہ خالی کیوں رہ جاتا ہے؟
اگرچہ ریسیپنس ہیڈرز فریمنگ کی اجازت دیتے ہیں، لیکن صفحہ میں غالباً جاوا اسکرپٹ فريم بسٹنگ کوڈ موجود ہو، لاگ ان یا کوکیز کی ضرورت ہو، یا دور بین کی نوعیت کے مطابق مختلف مواد فراہم کیا جائے۔ لہٰذا پیش نظارہ پر اعتماد کریں۔
کیا میں X-Frame-Options یا CSP کو بائی پاس کر سکتا ہوں؟
نہیں۔ برائوزر سیکیورٹی (کلک جیکنگ تحفظ) کے تحت ان ہیڈرز کو سختی سے نافذ کرتا ہے؛ کلائنٹ سائیڈ کے عارضی حل (Workarounds) قابلِ بھروسہ نہیں ہیں۔ اگر آپ کسی ایسے مواد کو ایمبیڈ کرنا چاہتے ہیں جس کا آپ کو مکمل کنٹرول نہیں ہے، تو سائٹ مالک سے درخواست کریں کہ وہ `frame-ancestors` پالیسی میں اپنے اوریجن (Origin) کو الو لسٹ میں شامل کرے، یا پھر ان کی فراہم کردہ سرکاری ایمبرڈ/API سولوشن استعمال کریں۔
"DENY" اور "SAMEORIGIN" کے درمیان فرق کیا ہے؟
"DENY" تمام آئی فریمز میں صفحہ ظاہر ہونے سے روک دیتا ہے؛ جبکہ "SAMEORIGIN" صرف ان صفحات کو فریمنگ کی اجازت دیتا ہے جو بالکل ایک ہی اسکیم، ہوسٹ اور پورٹ سے تعلق رکھتے ہوں۔
کیا یہ چیکر میری URLs محفوظ کرتا ہے؟
آپ کی ہسٹری صرف آپ کے براؤزر ٹیب کے اندر `sessionStorage` کے ذریعے محفوظ ہوتی ہے اور ٹیب بند ہوتے ہی خود بخود مٹ جاتی ہے۔ چیک سرور صرف درکار URL کو فریچ کرتا ہے تاکہ اس کے ریسیپنس ہیڈرز کا تجزیہ کر سکے۔
کیا وجہ ہے کہ ایک ہی URL مختلف اوقات میں مختلف نتائج دکھاتا ہے؟
ویب سائٹس مختلف حالات کے تحت مختلف ہیڈرز بھیج سکتی ہیں، جیسے کہ مخصوص پیتھ کے لیے، ریڈائریکس کے بعد، یوزر ایجنٹ کے مطابق، یا A/B ٹیسٹس اور WAF قواعد کی بنیاد پر۔ موجودہ حالت جانچنے کے لیے اسکریننگ کو دوبارہ چلائیں۔