گائیڈز

ماحولیاتی متغیرات اور سیکرٹس کیا ہیں؟ ایک سادہ رہنما

ماحولیاتی متغیر (environment variable) ایک نام دار ترتیب ہے، جیسے DATABASE_URL یا STRIPE_SECRET_KEY، جو آپ کی ایپ کو چلتے وقت دی جاتی ہے، بجائے اس کے کہ وہ کوڈ میں لکھی جائے۔ سیکرٹ وہ ماحولیاتی متغیر ہے جس کی قدر نجی رہنی چاہیے: ایک API کلید، ایک پاس ورڈ، ایک دستخطی کلید۔ ان قدروں کو کوڈ سے باہر رکھنے کا مطلب ہے کہ آپ ایپ میں تبدیلی کیے بغیر انہیں بدل سکتے ہیں، ٹیسٹنگ اور حقیقی صارفین کے لیے مختلف قدریں استعمال کر سکتے ہیں، اور کوڈ شیئر یا شائع کرتے وقت انہیں لیک ہونے سے روک سکتے ہیں۔

AI کے ساتھ تعمیر کرتے وقت یہ کیوں اہم ہے

جونہی آپ کی ایپ کسی دوسری سروس کے ساتھ کوئی مفید کام کرتی ہے، جیسے ادائیگی لینا، ای میل بھیجنا، یا AI ماڈل کو کال کرنا، اسے ایک کلید درکار ہوتی ہے۔ AI ایپ بلڈرز یہ کلیدیں باقاعدگی سے مانگتے ہیں، اور یہ طے کرتا ہے کہ کلید کہاں جاتی ہے اور آپ کی ایپ کتنی محفوظ ہے۔

AI سے بنی ایپس میں دو غلطیاں عام ہیں:

  • کلید چیٹ یا کوڈ میں چپکا دی جاتی ہے۔ پھر وہ چیٹ ہسٹری، پروجیکٹ فائلوں اور ہر ایکسپورٹ یا ریپازٹری میں رہتی ہے۔ جو بھی اسے دیکھے وہ آپ کے اکاؤنٹ پر استعمال کر سکتا ہے۔
  • کلید براؤزر میں استعمال ہوتی ہے۔ اگر Stripe یا OpenAI کو کال کرنے والا کوڈ صفحے میں چلے، تو کلید ہر وزیٹر تک جاتی ہے۔ لوگ دیکھتے بھی ہیں، اور خودکار اسکینر مسلسل ایکسپوز ہونے والی کلیدیں تلاش کرتے رہتے ہیں۔

ماحولیاتی متغیرات کو سمجھنے سے آپ دونوں مسئلے پہچان سکتے ہیں اور اس کا حل مانگ سکتے ہیں۔

روزمرہ کی مثال: ہوٹل کا سیف

آپ کی ایپ کا کوڈ ایک ہوٹل کے کمرے جیسا ہے۔ مہمان (اور صفائی کرنے والے، اور جن کو آپ کارڈ کی چابی دیں) اس میں سے گزرتے ہیں۔ آپ اپنا پاسپورٹ میز پر نہیں چھوڑتے۔

ماحولیاتی متغیرات کمرے کا سیف ہیں۔ کمرے کو معلوم ہے کہ سیف موجود ہے اور ضرورت پڑنے پر اسے کیسے کھولنا ہے، لیکن پاسپورٹ کہیں پڑا نہیں ہوتا۔ اور اگر آپ ٹیسٹ سیٹ اپ سے لائیو سائٹ کی طرف جائیں، تو کمرہ دوبارہ سجائے بغیر اس کے سیف میں مختلف پاسپورٹ رکھ دیتے ہیں۔

یہ کیسے کام کرتا ہے

آپ کا کوڈ ایک نام کا حوالہ دیتا ہے، قدر کا نہیں۔ سرور پر JavaScript میں یہ کچھ ایسا لگتا ہے: process.env.STRIPE_SECRET_KEY۔ جب ایپ شروع ہوتی ہے، پلیٹ فارم جس پر وہ چلتی ہے اس نام کی قدر بھر دیتا ہے۔ پلیٹ فارم کی ترتیبات میں قدر بدلیں، ری اسٹارٹ یا دوبارہ ڈیپلائے کریں، اور ایپ نئی قدر استعمال کرنے لگتی ہے، کوڈ میں کسی تبدیلی کے بغیر۔

قدریں کہاں سے آتی ہیں، یہ اس پر منحصر ہے کہ ایپ کہاں چلتی ہے:

کہاں چلتی ہےقدریں کہاں محفوظ ہیں
ڈویلپر کے لیپ ٹاپ پرعموماً .env نامی مقامی فائل، جو کبھی git میں کمٹ نہیں ہونی چاہیے
AI بلڈر کے پریویو میںپروجیکٹ کا سیکرٹس یا ترتیبات کا پینل
ہوسٹنگ پلیٹ فارم پراس پلیٹ فارم کی ماحولیاتی متغیرات کی ترتیبات
GitHub Actions یا دیگر آٹومیشن میںاس سروس کا اپنا خفیہ کردہ سیکرٹس اسٹور

عوامی بمقابلہ خفیہ متغیرات

ہر ماحولیاتی متغیر خفیہ نہیں ہوتا۔ انہیں دو گروپوں میں بانٹنا مددگار ہے:

قسممثالیںکیا براؤزر انہیں دیکھ سکتا ہے؟
عوامی ترتیبسائٹ کا نام، عوامی analytics ID، Stripe کی publishable کلید، فیچر سوئچہاں، یہ ٹھیک ہے
سیکرٹسStripe کی secret کلید، OpenAI یا Anthropic API کلید، ڈیٹابیس کنیکشن اسٹرنگ، ای میل فراہم کنندہ کی کلید، webhook دستخطی سیکرٹکبھی نہیں

ویب فریم ورکس یہ تقسیم واضح کرتے ہیں۔ Vite میں صرف وہ متغیرات براؤزر کوڈ میں شامل ہوتے ہیں جن کے نام VITE_ سے شروع ہوں؛ Next.js میں سابقہ NEXT_PUBLIC_ ہے۔ یہ ایک حفاظتی خصوصیت ہے: ان سابقوں والی ہر چیز ان فائلوں میں جاتی ہے جو ہر وزیٹر ڈاؤن لوڈ کرتا ہے، اس لیے کسی سیکرٹ کو کبھی یہ سابقہ نہیں دینا چاہیے۔

ایک عملی مثال: AI خلاصہ بٹن

آپ ایک “اس نوٹ کا خلاصہ بنائیں” بٹن چاہتے ہیں جو AI ماڈل کو کال کرے۔

غیر محفوظ طریقہ: بٹن کا کوڈ، جو براؤزر میں چلتا ہے، کلید کو اندر لکھ کر AI فراہم کنندہ کو براہِ راست کال کرتا ہے۔ یہ پریویو میں کام کرتا ہے۔ لیکن اس کا مطلب یہ بھی ہے کہ کوئی بھی ڈیولپر ٹولز کھول کر کلید نقل کر سکتا ہے اور آپ کے اکاؤنٹ پر بل بڑھا سکتا ہے۔

محفوظ طریقہ:

  1. آپ فراہم کنندہ سے کلید بناتے ہیں اور اسے اپنے پروجیکٹ کی ترتیبات میں OPENAI_API_KEY (یا ملتے جلتے نام) کے سیکرٹ کے طور پر محفوظ کرتے ہیں۔
  2. بیک اینڈ میں ایک روٹ ہوتا ہے، POST /api/summarise، جو process.env.OPENAI_API_KEY پڑھتا ہے، تصدیق کرتا ہے کہ صارف لاگ ان ہے، اور فراہم کنندہ کو کال کرتا ہے۔
  3. بٹن آپ کے روٹ کو کال کرتا ہے، فراہم کنندہ کو نہیں۔ براؤزر کبھی کلید نہیں دیکھتا۔
  4. آپ وہی سیکرٹ شائع شدہ ایپ کی ترتیبات میں شامل کرتے ہیں اور دوبارہ ڈیپلائے کرتے ہیں، تاکہ لائیو سائٹ کے پاس بھی وہ ہو۔

یہ طریقہ، کہ براؤزر آپ کے سرور کو کال کرے اور سرور کلید رکھ کر سروس کو کال کرے، ادائیگیوں، ای میل، نقشوں اور ہر دوسری ادا شدہ API پر لاگو ہوتا ہے۔ AI کیس کے لیے LLM APIs استعمال کرنے کا رہنما زیادہ گہرائی میں جاتا ہے۔

اہم اصطلاحات

  • .env فائل: NAME=value سطروں کی متنی فائل جو مقامی ڈیولپمنٹ میں استعمال ہوتی ہے۔ اسے .gitignore میں شامل کریں تاکہ وہ کمٹ نہ ہو۔
  • .env.example: اس کی نقل جس میں نام ہوں مگر اصل قدریں نہ ہوں۔ یہ کمٹ کی جاتی ہے تاکہ دوسروں کو معلوم ہو کہ کون سی متغیرات سیٹ کرنی ہیں۔
  • Rotate: کسی سیکرٹ کو نئے سے بدلنا اور پرانے کو منسوخ کرنا۔
  • Scope / اجازتیں: کئی فراہم کنندگان آپ کو ایسی کلیدیں بنانے دیتے ہیں جو صرف کچھ کام کر سکیں۔ وہ کلید جو صرف ای میل بھیج سکے، ہر کام کرنے والی کلید سے کم خطرناک ہے۔
  • ٹیسٹ بمقابلہ لائیو کلیدیں: Stripe جیسے فراہم کنندگان ٹیسٹنگ اور حقیقی رقم کے لیے الگ کلیدیں دیتے ہیں۔ لانچ تک ٹیسٹ کلیدیں استعمال کریں۔
  • Signing secret: ایک سیکرٹ جو یہ جانچنے کے لیے استعمال ہوتا ہے کہ کوئی پیغام، جیسے webhook، واقعی بھیجنے والے کی طرف سے آیا ہے۔

عام غلطیاں اور غلط فہمیاں

  • “میری ریپازٹری نجی ہے، تو اس میں کلیدیں ٹھیک ہیں۔” نجی ریپازٹریز بھی شیئر، فورک، ایکسپورٹ اور لیپ ٹاپ پر کلون ہوتی ہیں۔ کلیدیں وہاں نہیں ہونی چاہئیں۔ اگر آپ پروجیکٹ کو GitHub سے جوڑتے ہیں، تو دیکھیں کہ کوئی .env فائل شامل نہ ہو۔
  • “میں نے اسے مٹا دیا، تو وہ ختم ہو گئی۔” Git تاریخ محفوظ رکھتا ہے، اور چیٹ لاگز پیغامات محفوظ رکھتے ہیں۔ اگر کوئی کلید کبھی ایکسپوز ہوئی ہو تو اسے rotate کریں۔
  • سیکرٹ پر عوامی سابقہ لگانا۔ VITE_OPENAI_KEY آپ کی کلید کو براؤزر بنڈل میں ڈال دیتا ہے۔
  • دوبارہ ڈیپلائے کرنا بھول جانا۔ ترتیبات میں متغیر بدلنے کا اثر عموماً تب ہوتا ہے جب ایپ ری اسٹارٹ ہو یا دوبارہ شائع ہو۔
  • ہر چیز کے لیے ایک کلید۔ ٹیسٹ اور لائیو کے لیے، اور ہر ایپ کے لیے الگ کلیدیں رکھنے سے ایک کو منسوخ کرنا باقی کو توڑے بغیر ممکن ہوتا ہے۔
  • کوئی خرچ کی حد نہیں۔ ادا شدہ APIs کے لیے، کلید لیک ہونے کی صورت میں، فراہم کنندہ کے ڈیش بورڈ میں بجٹ یا حد مقرر کریں۔

AI بلڈر سے کیا مانگیں

  • “Stripe کی سیکرٹ کلید STRIPE_SECRET_KEY نامی ماحولیاتی متغیر سے پڑھیں۔ اسے صرف سرور پر استعمال کریں۔”
  • “یقینی بنائیں کہ کوئی سیکرٹ کلائنٹ سائیڈ کوڈ میں استعمال نہ ہو اور اسے VITE_ یا NEXT_PUBLIC_ سابقہ نہ دیا گیا ہو۔”
  • “ایک .env.example بنائیں جس میں ایپ کو درکار ہر متغیر کے نام ہوں، بغیر قدروں کے، اور یقینی بنائیں کہ .env git میں نظرانداز ہو۔”
  • “بنی ہوئی فرنٹ اینڈ فائلوں میں کسی بھی ایسی اسٹرنگ کو چیک کریں جو API کلید لگتی ہو۔”

ہماری AI سے بنی ایپس کے لیے سیکیورٹی چیک لسٹ لانچ سے پہلے چلانے کے قابل دیگر جانچوں کے ساتھ سیکرٹس کو بھی کور کرتی ہے۔

Mythex پر سیکرٹس

Mythex پر سیکرٹس پروجیکٹ کے ماحولیاتی متغیرات ہیں جو پریویو سینڈباکس اور آپ کی شائع شدہ ایپ دونوں میں ڈالے جاتے ہیں۔ آپ انہیں project settings → Secrets کے تحت یا چیٹ میں /secrets کے ساتھ شامل کرتے ہیں، اور جب ایجنٹ کو کلید درکار ہو تو وہ چیٹ میں ایک سیکرٹس کارڈ دکھاتا ہے، تاکہ قدر پیغام کی تاریخ میں نہیں بلکہ ایک فارم فیلڈ میں جائے۔ اگر آپ لائیو ایپ کا کوئی سیکرٹ بدلیں تو دوبارہ شائع کریں تاکہ ڈیپلائے اسے لے لے۔ پروجیکٹ ایکسپورٹس سیکرٹس کو باہر رکھتے ہیں، اور درآمد شدہ .env فائلوں سے وہ ہٹا دیے جاتے ہیں تاکہ آپ انہیں ترتیبات میں دوبارہ شامل کریں۔ تفصیل کے لیے دستاویزات میں ماحولیاتی متغیرات اور سیکرٹس اور چیٹ میں سیکرٹس دیکھیں۔

سوالات

ماحولیاتی متغیر کیا ہے؟

ماحولیاتی متغیر ایک نام دار ترتیب ہے، جیسے `STRIPE_SECRET_KEY` یا `DATABASE_URL`، جو پروگرام کے چلنے کے وقت اسے دی جاتی ہے، بجائے اس کے کہ وہ کوڈ میں لکھی جائے۔ اس طرح وہی کوڈ ڈیولپمنٹ اور پروڈکشن میں مختلف قدریں استعمال کر سکتا ہے۔

ماحولیاتی متغیر اور سیکرٹ میں کیا فرق ہے؟

سیکرٹ ایک ماحولیاتی متغیر ہے جس کی قدر نجی رہنی چاہیے، جیسے API کلید، ڈیٹابیس پاس ورڈ یا webhook دستخطی سیکرٹ۔ باقی ماحولیاتی متغیرات، جیسے سائٹ کا نام یا فیچر سوئچ، عوامی ہو سکتے ہیں۔

کیا فرنٹ اینڈ میں API کلیدیں ڈالنا محفوظ ہے؟

نہیں۔ فرنٹ اینڈ کوڈ میں موجود ہر چیز ہر وزیٹر کے براؤزر میں ڈاؤن لوڈ ہوتی ہے اور پڑھی جا سکتی ہے۔ خفیہ کلیدیں صرف سرور پر استعمال ہونی چاہئیں، اور براؤزر آپ کے سرور کو کال کرے، جو پھر فراہم کنندہ کو کال کرے۔

اگر میری API کلید لیک ہو جائے تو کیا کروں؟

فوراً فراہم کنندہ کے پاس اسے منسوخ یا تبدیل (rotate) کریں، نئی کلید بنائیں، جہاں بھی آپ کی ایپ سیکرٹس محفوظ کرتی ہے وہاں اپ ڈیٹ کریں، اور دوبارہ ڈیپلائے کریں۔ صرف کوڈ یا چیٹ ہسٹری سے کلید ہٹانا کافی نہیں، کیونکہ اس کی نقلیں پہلے ہی موجود ہو سکتی ہیں۔

Mythex · Pricing · AI کے ساتھ کچھ بھی بنائیں · ویب سائٹ اور ایپ ٹیمپلیٹس · Mythex کا موازنہ · AI سے ایپ بنانے کی اصطلاحات · AI سے ایپ بنانے کے مفت ٹولز · English

English አማርኛ العربية Български বাংলা Bosanski Català Čeština Dansk Deutsch Ελληνικά Español Español (España) Eesti فارسی Suomi Français Français (Canada) ગુજરાતી हिन्दी Hrvatski Magyar Հայերեն Bahasa Indonesia Íslenska Italiano 日本語 ქართული Қазақ тілі ಕನ್ನಡ 한국어 Lietuvių Latviešu Македонски മലയാളം Монгол मराठी Bahasa Melayu မြန်မာ Norsk bokmål Nederlands ਪੰਜਾਬੀ Polski Português (Brasil) Português (Portugal) Română Русский Slovenčina Slovenščina Soomaali Shqip Srpski Svenska Kiswahili தமிழ் తెలుగు ไทย Tagalog Türkçe Українська Tiếng Việt 简体中文 繁體中文(香港) 繁體中文(台灣)