سیکیورٹی
ہمارا سیکیورٹی ماڈل ایک جملے میں: سرور پر حملہ کرنے کے لیے کچھ ہے ہی نہیں۔ نیچے دی گئی ہر بات آپ کے DevTools سے قابل تصدیق ہے۔
آرکیٹیکچر
Abundera QR ایک اسٹیٹک سنگل پیج ایپلیکیشن ہے جو Cloudflare Pages سے پیش کی جاتی ہے۔ کوئی ایپلیکیشن سرور نہیں، کوئی ڈیٹابیس نہیں، کوئی یوزر اکاؤنٹ نہیں، کوئی تصدیق نہیں، کوئی API اینڈ پوائنٹ نہیں، اور کوئی بیک اینڈ کوڈ پاتھ نہیں جو یوزر ڈیٹا کو پروسیس کرے۔ ہر QR جنریشن، انکوڈنگ، اسکیننگ اور رینڈرنگ آپریشن مکمل طور پر آپ کے براؤزر کے اندر چلتا ہے۔
خطرے کا ماڈل
چونکہ ہم کوئی یوزر ڈیٹا جمع، ذخیرہ یا منتقل نہیں کرتے، ویب ایپ کے سب سے عام خطرات, کریڈینشل چوری، ڈیٹابیس لیک، سیشن ہائی جیکنگ، سرور سائیڈ انجیکشن, لاگو نہیں ہوتے۔ باقی ماندہ حملے کی سطح ہمارے اصل سے پیش کردہ اسٹیٹک اثاثہ بنڈل (HTML، CSS، JavaScript) ہے۔ ہم فرض کر کے ڈیزائن کرتے ہیں:
- اصل کی سمجھوتہ کاری: حملہ آور ہمارے بنڈل شدہ اثاثوں میں سے کسی ایک کو نقصاندہ سے بدل دیتا ہے۔ نیچے دیا گیا CSP دھماکے کا دائرہ محدود کرتا ہے؛ cache-buster ٹوکنز معلوم-درست ورژن پر واپسی آسان بناتے ہیں۔
- یوزر کی طرف سے دیا گیا ان پٹ: QR پے لوڈ، vCard نام، WiFi پاسورڈ، بیچ CSV قطاریں، اسکین کردہ تصویر کا مواد۔ ہر ان پٹ پاتھ کو ناقابل اعتماد سمجھا جاتا ہے جب وہ DOM میں واپس رینڈر ہوتا ہے۔
- یوزر کی طرف سے دی گئی تصاویر: vCard فوٹو URLs اور لوگو اپلوڈ۔ تصاویر کو canvas پر رینڈر کیا جاتا ہے، کبھی DOM میں خام مارک اپ کے طور پر شامل نہیں کیا جاتا۔
- تھرڈ پارٹی براؤزر ایکسٹینشن: دائرے سے باہر۔ اگر آپ کے براؤزر میں کسی ایکسٹینشن کو ہر صفحہ تبدیل کرنے کی اجازت ہے تو وہ ہمارا صفحہ بھی تبدیل کر سکتی ہے۔ ہماری ضمانتیں اس وقت لاگو ہوتی ہیں جب صفحہ غیر تبدیل شدہ لوڈ کیا گیا ہو۔
Content Security Policy, ڈائریکٹیو کے مطابق
موجودہ پالیسی (کسی بھی درخواست کے لیے Response headers میں تصدیق کریں):
Content-Security-Policy:
default-src 'self';
script-src 'self' 'wasm-unsafe-eval';
worker-src 'self' blob:;
style-src 'self' 'unsafe-inline';
font-src 'self';
img-src 'self' data: blob: https:;
connect-src 'self' https:;
frame-ancestors 'none';
base-uri 'self';
form-action 'self'ہر ڈائریکٹیو کیا کرنے دیتی ہے اور کہاں سمجھوتہ کرتی ہے:
default-src 'self', مضبوط بنیاد۔ جو کچھ ہم واضح طور پر ڈھیلا نہیں کرتے وہ same-origin میں رہتا ہے۔script-src 'self' 'wasm-unsafe-eval', کوئی inline<script>نہیں، کوئیeval()نہیں۔'wasm-unsafe-eval'ہماری QR انکوڈر لائبریری کے WebAssembly کمپائلیشن پاتھ کے لیے ضروری ہے؛ یہ روایتیeval()کی اجازت نہیں دیتا۔ ہماری اپنی پری-ڈیپلوائے چیک ہر HTML صفحے پر inline scripts اسکین کرتی ہے اور بلڈ ناکام کر دیتی ہے۔style-src 'self' 'unsafe-inline', ایک حقیقی رعایت۔ ہمارا QR پریویو inline میں پکسل سطح کے رنگ حساب کرتا ہے (انفرادی ماڈیولز پر style attributes)۔ Hash-based allowlist کام کرتا لیکن بغیر ڈیپلوائے کے کسی بھی style اپڈیٹ پر ناکام ہو جاتا۔ سمجھوتہ: ہم قدرے کمزور style پالیسی قبول کرتے ہیں؛ styling بہرحال ڈیٹا نہیں نکال سکتی (CSS کی کوئیconnect-srcرسائی نہیں)۔img-src 'self' data: blob: https:, inline QR رینڈر کے لیےdata:، ایکسپورٹ ڈاؤن لوڈ URLs کے لیےblob:، یوزر کی طرف سے دیے گئے vCard فوٹو URLs کے لیےhttps:۔ یوزر کے دیے گئے URLs کبھی execute نہیں ہوتے، صرف رینڈر ہوتے ہیں۔connect-src 'self' https:, fetch() ہمارے اصل اور یوزر کی طرف سے شروع کردہ HTTPS فیچز (مثلاً فوٹو URL اسکین کرنا) تک محدود ہے۔ DNS / WebSocket / beacon کے ذریعے من مانے hosts پر exfiltration روکتا ہے۔frame-ancestors 'none', کوئی دوسری سائٹ ہمیں embed نہیں کر سکتی۔ clickjacking روکتا ہے۔base-uri 'self', inject کردہ نقصاندہ<base>ٹیگ relative URLs کو حملہ آور کے اصل پر redirect نہیں کر سکتا۔form-action 'self', کوئی بھی inject کردہ form صرف ہمارے اصل پر post کر سکتا ہے۔ ہمارے پاس کوئی form نہیں جو server-side ڈیٹا بھیجے؛ یہ اضافی حفاظت ہے۔
/bio/* (یوزر کے دیے گئے avatars کے لیے ڈھیلا img-src) اور /embed/* (جان بوجھ کر embedding کے لیے ڈھیلا frame-ancestors) پر الگ CSP پالیسیاں لاگو ہوتی ہیں۔ دونوں site/_headers میں دستاویز شدہ ہیں۔
ٹرانسپورٹ + فریمنگ ہیڈرز
- HSTS:
Strict-Transport-Security: max-age=31536000; includeSubDomains; preload, ۱ سال، تمام subdomains، HSTS preload list کے لیے اہل۔ HTTP پر downgrade کو معتبر براؤزرز مسترد کرتے ہیں۔ - X-Frame-Options: DENY, CSP
frame-ancestorsکے ساتھ redundant، پرانے براؤزر کوریج کے لیے رکھا گیا ہے۔ - X-Content-Type-Options: nosniff, MIME confusion حملوں کو روکتا ہے۔
- Referrer-Policy: strict-origin-when-cross-origin, آؤٹ باؤنڈ لنک کلکس origin ظاہر کرتے ہیں لیکن path نہیں۔
- Permissions-Policy:
camera=(self), microphone=(), geolocation=(), کیمرہ صرف ہمارے اپنے اسکینر کے لیے اجازت یافتہ؛ مائیک اور لوکیشن embed ہونے پر بھی واضح طور پر مسترد۔
سروس ورکر
ہمارا سروس ورکر (site/sw.js) صرف same-origin اثاثے cache کرتا ہے۔ fetch handler واضح طور پر cross-origin درخواستیں اور non-GET طریقے مسترد کرتا ہے, آپ GitHub پر logic پڑھ سکتے ہیں۔ Cache writes event.waitUntil() میں لپٹے ہوئے ہیں تاکہ navigation کے دوران ڈراپ نہ ہوں۔
ان پٹ صفائی
ہر رینڈرنگ پاتھ جو یوزر ان پٹ قبول کرتا ہے اسے ناقابل اعتماد متن کے طور پر برتتا ہے:
- QR پے لوڈ پریویوز
textContentاستعمال کرتے ہیں،innerHTMLنہیں۔ - Share targets (clipboard،
navigator.share()) یوزر متن کو string کے طور پر پاس کرتے ہیں، کبھی markup کے طور پر نہیں۔ - SVG ایکسپورٹ ہماری انکوڈر لائبریری سے تیار ہوتے ہیں؛ یوزر مواد
<image>xlink:hrefمیں base64-encoded ہوتا ہے، SVG elements کے طور پر inject نہیں۔ - پرنٹ پریویو blob URL استعمال کرتا ہے،
document.write()نہیں۔ - localStorage parsing
try/catchمیں لپٹی ہوئی ہے, خراب entry ایک تازہ خالی default دیتی ہے، کبھی ایسا exception نہیں جو live code path میں unwind ہو سکے۔ - "لنک کھولیں" بٹن کے طور پر دکھائے گئے یوزر کے دیے گئے URLs
http(s)://تک محدود ہیں,javascript:اورdata:schemes مسترد۔
کراس اورجن امیج فیچنگ
جب کوئی یوزر vCard فوٹو یا لوگو کے طور پر کوئی https: URL پیسٹ کرتا ہے تو براؤزر اسے CORS اور ہمارے CSP کی img-src allowlist کے تابع فیچ کرتا ہے۔ تصویر canvas پر رینڈر ہوتی ہے۔ یہ کبھی live DOM نہیں بنتی، کبھی code کے طور پر نہیں چلتی، اور کبھی ہمارے اصل تک نہیں پہنچتی, فیچ براؤزر → remote image ہے، اور نتیجہ client-side پر paint ہوتا ہے۔ remote image URL کنٹرول کرنے والا حملہ آور یہ ٹریک کر سکتا ہے کہ URL لوڈ ہوا (اپنے سرور پر ایک log line) لیکن ہمارے صفحے سے کچھ نہیں نکال سکتا۔
Subresource Integrity (SRI)
ہم جو JavaScript اور CSS ship کرتے ہیں وہ سب same-origin ہے۔ ہم کوئی تھرڈ پارٹی scripts یا stylesheets لوڈ نہیں کرتے، اس لیے SRI hashes لاگو نہیں ہوتے۔ اگر ہم کبھی کوئی تھرڈ پارٹی اثاثہ لوڈ کریں گے تو اس پر SRI integrity attribute ship کریں گے اور hash-update process اس صفحے پر دستاویز کریں گے۔
خطرے کی اطلاع دینا
اگر آپ Abundera QR کو متاثر کرنے والا کوئی سیکیورٹی مسئلہ دریافت کریں, چاہے ہمارے کوڈ، ہماری تعیناتی یا ہم جو dependency ship کرتے ہیں اس میں, براہ کرم اسے نجی طور پر security@abundera.ai کو رپورٹ کریں۔ ہم ۷۲ گھنٹوں میں triage کرنے کا ہدف رکھتے ہیں۔ آپ ہمارے /.well-known/security.txt فائل میں رابطے کی تفصیلات کے ذریعے بھی رابطہ کر سکتے ہیں۔
کوئی bug bounty نہیں (ابھی کے لیے)
ہم ابھی ادائیگی شدہ انعامات پیش نہیں کرتے، لیکن ہر تصدیق شدہ درست رپورٹ کو changelog میں credit اور ہمارا عوامی شکریہ ملتا ہے۔
مندرجہ بالا کسی بھی بات کی تصدیق کریں
اس صفحے پر ہر دعوی آپ کے براؤزر کے DevTools سے ہم پر اعتماد کیے بغیر قابل تصدیق ہے:
- CSP: DevTools → Network →
/→ Headers۔Content-Security-Policyresponse header پڑھیں۔ - HSTS + سیکیورٹی ہیڈرز: اسی جگہ, تمام
Strict-Transport-Security،X-Frame-Optionsوغیرہ نظر آتے ہیں۔ - کوئی آؤٹ باؤنڈ calls نہیں: DevTools → Network → Fetch/XHR۔ QR بنائیں۔ count صفر رہتا دیکھیں۔
- سروس ورکر scope: DevTools → Application → Service Workers۔ script source اور cached asset list تصدیق کریں۔
- کوئی cookies نہیں: DevTools → Application → Cookies۔ خالی۔
- مکمل walkthrough: manifesto کا verification section۔
رابطہ
سیکیورٹی انکشافات: security@abundera.ai