ماحولیاتی متغیرات اور سیکرٹس کیا ہیں؟ ایک سادہ رہنما
ماحولیاتی متغیر (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 فراہم کنندہ کو براہِ راست کال کرتا ہے۔ یہ پریویو میں کام کرتا ہے۔ لیکن اس کا مطلب یہ بھی ہے کہ کوئی بھی ڈیولپر ٹولز کھول کر کلید نقل کر سکتا ہے اور آپ کے اکاؤنٹ پر بل بڑھا سکتا ہے۔
محفوظ طریقہ:
- آپ فراہم کنندہ سے کلید بناتے ہیں اور اسے اپنے پروجیکٹ کی ترتیبات میں
OPENAI_API_KEY(یا ملتے جلتے نام) کے سیکرٹ کے طور پر محفوظ کرتے ہیں۔ - بیک اینڈ میں ایک روٹ ہوتا ہے،
POST /api/summarise، جوprocess.env.OPENAI_API_KEYپڑھتا ہے، تصدیق کرتا ہے کہ صارف لاگ ان ہے، اور فراہم کنندہ کو کال کرتا ہے۔ - بٹن آپ کے روٹ کو کال کرتا ہے، فراہم کنندہ کو نہیں۔ براؤزر کبھی کلید نہیں دیکھتا۔
- آپ وہی سیکرٹ شائع شدہ ایپ کی ترتیبات میں شامل کرتے ہیں اور دوبارہ ڈیپلائے کرتے ہیں، تاکہ لائیو سائٹ کے پاس بھی وہ ہو۔
یہ طریقہ، کہ براؤزر آپ کے سرور کو کال کرے اور سرور کلید رکھ کر سروس کو کال کرے، ادائیگیوں، ای میل، نقشوں اور ہر دوسری ادا شدہ 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بنائیں جس میں ایپ کو درکار ہر متغیر کے نام ہوں، بغیر قدروں کے، اور یقینی بنائیں کہ.envgit میں نظرانداز ہو۔” - “بنی ہوئی فرنٹ اینڈ فائلوں میں کسی بھی ایسی اسٹرنگ کو چیک کریں جو API کلید لگتی ہو۔”
ہماری AI سے بنی ایپس کے لیے سیکیورٹی چیک لسٹ لانچ سے پہلے چلانے کے قابل دیگر جانچوں کے ساتھ سیکرٹس کو بھی کور کرتی ہے۔
Mythex پر سیکرٹس
Mythex پر سیکرٹس پروجیکٹ کے ماحولیاتی متغیرات ہیں جو پریویو سینڈباکس اور آپ کی شائع شدہ ایپ دونوں میں ڈالے جاتے ہیں۔ آپ انہیں project settings → Secrets کے تحت یا چیٹ میں /secrets کے ساتھ شامل کرتے ہیں، اور جب ایجنٹ کو کلید درکار ہو تو وہ چیٹ میں ایک سیکرٹس کارڈ دکھاتا ہے، تاکہ قدر پیغام کی تاریخ میں نہیں بلکہ ایک فارم فیلڈ میں جائے۔ اگر آپ لائیو ایپ کا کوئی سیکرٹ بدلیں تو دوبارہ شائع کریں تاکہ ڈیپلائے اسے لے لے۔ پروجیکٹ ایکسپورٹس سیکرٹس کو باہر رکھتے ہیں، اور درآمد شدہ .env فائلوں سے وہ ہٹا دیے جاتے ہیں تاکہ آپ انہیں ترتیبات میں دوبارہ شامل کریں۔ تفصیل کے لیے دستاویزات میں ماحولیاتی متغیرات اور سیکرٹس اور چیٹ میں سیکرٹس دیکھیں۔
سوالات
ماحولیاتی متغیر کیا ہے؟
ماحولیاتی متغیر ایک نام دار ترتیب ہے، جیسے `STRIPE_SECRET_KEY` یا `DATABASE_URL`، جو پروگرام کے چلنے کے وقت اسے دی جاتی ہے، بجائے اس کے کہ وہ کوڈ میں لکھی جائے۔ اس طرح وہی کوڈ ڈیولپمنٹ اور پروڈکشن میں مختلف قدریں استعمال کر سکتا ہے۔
ماحولیاتی متغیر اور سیکرٹ میں کیا فرق ہے؟
سیکرٹ ایک ماحولیاتی متغیر ہے جس کی قدر نجی رہنی چاہیے، جیسے API کلید، ڈیٹابیس پاس ورڈ یا webhook دستخطی سیکرٹ۔ باقی ماحولیاتی متغیرات، جیسے سائٹ کا نام یا فیچر سوئچ، عوامی ہو سکتے ہیں۔
کیا فرنٹ اینڈ میں API کلیدیں ڈالنا محفوظ ہے؟
نہیں۔ فرنٹ اینڈ کوڈ میں موجود ہر چیز ہر وزیٹر کے براؤزر میں ڈاؤن لوڈ ہوتی ہے اور پڑھی جا سکتی ہے۔ خفیہ کلیدیں صرف سرور پر استعمال ہونی چاہئیں، اور براؤزر آپ کے سرور کو کال کرے، جو پھر فراہم کنندہ کو کال کرے۔
اگر میری API کلید لیک ہو جائے تو کیا کروں؟
فوراً فراہم کنندہ کے پاس اسے منسوخ یا تبدیل (rotate) کریں، نئی کلید بنائیں، جہاں بھی آپ کی ایپ سیکرٹس محفوظ کرتی ہے وہاں اپ ڈیٹ کریں، اور دوبارہ ڈیپلائے کریں۔ صرف کوڈ یا چیٹ ہسٹری سے کلید ہٹانا کافی نہیں، کیونکہ اس کی نقلیں پہلے ہی موجود ہو سکتی ہیں۔