بلاگ پر واپس جائیں

شروعاتگائیڈ

API کلید محفوظ طریقے سے اسٹور کریں: env variable، .gitignore، لیک فکس

اپنی CheapTokens کلید کو کوڈ اور git سے باہر رکھیں: ماحولیاتی متغیر سیٹ کریں، .env کو .gitignore میں شامل کریں، اور جانیں کہ کلید لیک ہونے پر کیا کرنا ہے۔

از CheapTokens Teamشائع شدہ 7 منٹ کا مطالعہ

ٹرمینل جس میں ماحولیاتی متغیر export اور API کلید کے لیے .gitignore لائن ہے
اس صفحہ پر
  1. کلید آپ کے کوڈ میں کیوں نہیں ہونی چاہیے
  2. مرحلہ 1: کلید کو ماحولیاتی متغیر میں رکھیں
  3. مرحلہ 2: .env فائل استعمال کریں بغیر اسے commit کیے
  4. اگر کلید لیک ہو گئی: کیا کرنا ہے، ترتیب سے
  5. خود کو جانچیں

کلید کو ماحولیاتی متغیر (environment variable) میں رکھیں، اپنے کوڈ میں نہیں، اور کسی بھی .env فائل کو .gitignore میں ایک لائن کے ذریعے git سے باہر رکھیں۔ اگر کلید پہلے ہی کسی عوامی جگہ پر پہنچ چکی ہے، تو پہلے کلید کو سنبھالیں اور بعد میں صفائی کریں: جب تک کلید آپ کے کوڈ اور ٹولز میں موجود ہے، git ہسٹری صاف کرنا کچھ ٹھیک نہیں کرتا۔

بس یہی پوری بات ہے۔ یہ گائیڈ عملی ورژن ہے (بنیادی باتیں What is an API key میں ہیں): تین کمانڈز، ایک کام کرنے والی درخواست، اور برے دن کے لیے ایک مختصر منصوبہ۔

کلید آپ کے کوڈ میں کیوں نہیں ہونی چاہیے#

API کلید ایک پاس ورڈ ہے جو آپ کے پیسے خرچ کرتا ہے۔ جو بھی اسے رکھتا ہے وہ آپ کے بیلنس پر درخواستیں بھیج سکتا ہے، اور سروس انہیں آپ سے الگ نہیں پہچان سکتی۔

عام طور پر غلطی بورنگ طریقے سے ہوتی ہے۔ آپ پہلی درخواست چلانے کے لیے کلید کو کسی اسکرپٹ میں پیسٹ کرتے ہیں، اسکرپٹ چل جاتا ہے، آپ git push کرتے ہیں، اور ریپوزٹری عوامی ہو جاتی ہے۔ یا آپ اپنے ساتھی کو اپنی کنفگ فائل بھیج دیتے ہیں۔ یا آپ کسی ایرر کا اسکرین شاٹ لیتے ہیں جس کے کونے میں کلید نظر آ رہی ہوتی ہے۔ ہر بار نتیجہ ایک ہی ہوتا ہے۔

GitHub اس پیٹرن کو اچھی طرح جانتا ہے۔ اس کی secret scanning (GitHub docs، 29 اکتوبر 2026 کو چیک کیا گیا) تمام برانچز پر پوری Git ہسٹری میں ہارڈ کوڈڈ کریڈنشلز تلاش کرتی ہے، اور ساتھ ہی issues، pull requests، discussions، wikis اور secret gists میں بھی، اور کوئی چیز ملنے پر الرٹ جاری کرتی ہے۔ یعنی اگلی commit میں لائن ڈیلیٹ کرنے سے کچھ نہیں بدلتا: پرانی commit میں وہ اب بھی موجود ہے۔

یہاں وہی اسکرپٹ پہلے اور بعد میں ہے۔

موازنہ کریں

وہی اسکرپٹ، کلید کوڈ سے باہر منتقل

کوڈ میں کلید

python
from openai import OpenAI

client = OpenAI(
    base_url="https://api.cheaptokens.dev/v1",
    api_key="<your-key>",  # pasted here: ends up in git
)

ماحولیاتی متغیر سے کلید

python
import os
from openai import OpenAI

client = OpenAI(
    base_url="https://api.cheaptokens.dev/v1",
    api_key=os.environ["CHEAPTOKENS_API_KEY"],
)

دوسرا ورژن جیسا ہے ویسا ہی GitHub، چیٹ یا کوڈ ریویو میں جا سکتا ہے۔ کلید آپ کی مشین پر، فائل سے باہر رہتی ہے۔

مرحلہ 1: کلید کو ماحولیاتی متغیر میں رکھیں#

ماحولیاتی متغیر ایک نامزد ویلیو ہے جو آپ کا ٹرمینل ہر شروع کیے جانے والے پروگرام کو دیتا ہے۔ اسکرپٹ CHEAPTOKENS_API_KEY کو نام سے مانگتا ہے اور کبھی نہیں دیکھتا کہ یہ کہاں سے آیا۔

macOS اور Linux پر:

bash
export CHEAPTOKENS_API_KEY="<your-key>"

Windows PowerShell پر:

powershell
setx CHEAPTOKENS_API_KEY "<your-key>"

دو تفصیلیں لوگوں کو الجھا دیتی ہیں۔ export صرف اسی ٹرمینل ونڈو کے لیے رہتا ہے، اس لیے اسے برقرار رکھنے کے لیے لائن کو اپنے شیل پروفائل (~/.zshrc یا ~/.bashrc) میں شامل کریں۔ اور setx اس ونڈو کو تبدیل نہیں کرتا جس میں آپ نے ٹائپ کیا: ٹیسٹ کرنے سے پہلے نیا ٹرمینل کھولیں۔

اب ایک مکمل درخواست۔ یہ OpenAI-compatible endpoint، https://api.cheaptokens.dev/v1، اور DeepSeek-V4-Flash کو اس کی مکمل id کے ساتھ استعمال کرتی ہے (deepseek-ai/DeepSeek-V4-Flash-0731؛ ids CheapTokens docs سے لیں، کیونکہ نام پرووائیڈرز کے درمیان مختلف ہوتے ہیں):

python
import os
from openai import OpenAI

client = OpenAI(
    base_url="https://api.cheaptokens.dev/v1",
    api_key=os.environ["CHEAPTOKENS_API_KEY"],
)

resp = client.chat.completions.create(
    model="deepseek-ai/DeepSeek-V4-Flash-0731",
    messages=[{"role": "user", "content": "Say hi in five words."}],
)
print(resp.choices[0].message.content)
print(resp.usage)

ایک مختصر سلام تقریباً 20 ٹوکن اندر اور 20 باہر کی درخواست ہے، جو موجودہ قیمتوں پر $0.0000023 ہے (مکمل فہرست pricing page پر ہے)۔ اگر آپ نے ابھی تک پہلی درخواست نہیں بھیجی، تو Your first API request with CheapTokens اسے صفر سے سمجھاتا ہے۔

ماڈل کا جواب choices[0].message.content میں واپس آتا ہے، اور usage اس کے گنے گئے ٹوکن دکھاتا ہے۔ کلید فائل میں کبھی ظاہر نہیں ہوتی۔

Terminal showing the .env and .gitignore commands
The three commands that keep the key out of git

مرحلہ 2: .env فائل استعمال کریں بغیر اسے commit کیے#

ہر نئی ونڈو میں export ٹائپ کرنا بورنگ ہو جاتا ہے۔ ایک .env فائل ویلیو کو ایک جگہ، پروجیکٹ کے ساتھ رکھتی ہے:

text
CHEAPTOKENS_API_KEY=<your-key>

Python اسے python-dotenv کے ساتھ پڑھتا ہے (pip install python-dotenv):

python
from dotenv import load_dotenv
load_dotenv()  # fills os.environ from .env

فائل صرف اس وقت محفوظ ہے جب git اسے کبھی نہ دیکھے۔ پہلی commit سے پہلے اسے .gitignore میں شامل کریں:

bash
echo ".env" >> .gitignore
git check-ignore -v .env

اگر سب کچھ ٹھیک ہے، تو دوسری کمانڈ .gitignore:1:.env .env جیسا کچھ پرنٹ کرتی ہے: git آپ کو بتاتا ہے کہ کون سا قاعدہ فائل کو نظر انداز کر رہا ہے۔ اگر یہ کچھ پرنٹ نہیں کرتی، تو قاعدہ کام نہیں کر رہا۔ Windows پر، ایڈیٹر میں .gitignore بنائیں جس میں .env کی لائن ہو، یا Add-Content .gitignore .env استعمال کریں: PowerShell کا >> UTF-16 لکھ سکتا ہے، جسے git نظر انداز کر سکتا ہے۔

ایک جال: .gitignore صرف ان فائلوں پر اثر انداز ہوتا ہے جنہیں git ابھی ٹریک نہیں کر رہا۔ اگر .env پہلے ہی ایک بار commit ہو چکی ہے، تو git rm --cached .env چلائیں تاکہ git اسے ٹریک کرنا بند کر دے، اور اس میں موجود کلید کو exposed سمجھیں (نیچے مزید)۔ ایک صاف عادت یہ ہے کہ ویلیو کی بجائے متغیر کے نام اور placeholder کے ساتھ .env.example commit کریں، تاکہ ساتھی کو معلوم ہو کہ کیا سیٹ کرنا ہے۔

اگر کلید لیک ہو گئی: کیا کرنا ہے، ترتیب سے#

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

GitHub کی اپنی رہنمائی (وہی صفحہ، 29 اکتوبر 2026 کو چیک کیا گیا) یہ ہے کہ کریڈنشل کو فوراً rotate کریں؛ Git ہسٹری دوبارہ لکھنا اختیاری ہے اور کریڈنشل منسوخ ہونے کے بعد اکثر غیر ضروری۔ لوگ اسے الٹا کرتے ہیں: وہ ایک گھنٹہ ہسٹری صاف کرنے میں لگاتے ہیں جبکہ کلید اب بھی کام کر رہی ہوتی ہے۔ ایسا نہ کریں۔

اپنا کیس منتخب کریں

آپ کی کلید کے ساتھ کیا ہوا؟ قریب ترین کیس منتخب کریں

کلید ایسی commit میں تھی جو اب عوامی ہے

پہلے کوڈ سے کلید ہٹائیں، ماحولیاتی متغیر پر منتقل ہوں، .env کو .gitignore میں شامل کریں، اور اپنے بیلنس میں ان درخواستوں کو دیکھیں جو آپ نے نہیں بھیجیں۔ ہسٹری صاف کرنا بعد میں ایک اضافی چیز ہے، فوری حصہ نہیں۔

کلید کسی اسکرین شاٹ یا شیئرڈ فائل میں تھی

وہی ترتیب: اپنے ٹولز میں وہ کلید استعمال کرنا بند کریں اور ماحولیاتی متغیر پر منتقل ہوں، پھر اگر ممکن ہو تو پوسٹ یا فائل ڈیلیٹ کریں۔ ڈیلیٹ شدہ اسکرین شاٹ پہلے ہی کاپی ہو چکا ہو سکتا ہے، اس لیے صرف ڈیلیٹ کرنے پر بھروسہ نہ کریں۔

وہی کلید کئی ٹولز میں استعمال ہو رہی ہے

ہر اس جگہ سے گزریں جہاں کلید رکھی گئی تھی: آپ کا شیل پروفائل، .env فائلیں، ایڈیٹر اور ٹرمینل ٹولز، اور ہر ایک کو ماحولیاتی متغیر کی طرف اشارہ کریں، تاکہ تبدیلی کے لیے ایک ہی جگہ ہو۔ اگر کوئی ٹول متغیر پڑھنے میں ناکام ہو، تو 401/404 troubleshooting guide دکھاتا ہے کہ ایرر کیسا لگتا ہے۔

Three steps after a leak: take the key out of the code, update every tool, send a test request
Key out of the code first, then every tool, then a test request

صفائی کے بعد، مرحلہ 1 کی طرح ایک چھوٹی ٹیسٹ درخواست بھیجیں، اور اپنا بیلنس چیک کریں۔ اگر یہ جواب دیتی ہے اور بیلنس اور درخواستیں نارمل لگتی ہیں، تو صفائی مکمل ہے؛ اگلے چند دنوں تک بیلنس پر نظر رکھیں۔ جو کلید عوامی ہو چکی ہو اسے کوڈ سے ہٹانے کے بعد بھی exposed سمجھا جانا چاہیے، اس لیے بیلنس اور درخواستوں کی تعداد میں ان چیزوں پر نظر رکھیں جو آپ نے نہیں بھیجیں، اور وہ کلید نئی جگہوں پر دوبارہ استعمال نہ کریں۔ جن جگہوں پر کلید عام طور پر رہتی ہے، ان کے لیے Where to plug in your own API key دیکھیں۔

خود کو جانچیں#

خود آزمائیںآزمائیں: متغیر unset کریں اور اسکرپٹ چلائیں۔ آپ کو کیا نظر آتا ہے؟جواب دکھائیں

Python کسی بھی درخواست کے آپ کی مشین سے نکلنے سے پہلے KeyError: 'CHEAPTOKENS_API_KEY' کے ساتھ رک جاتا ہے۔ یہی اچھی ناکامی ہے: اسکرپٹ کلید کے بغیر چلنے سے انکار کرتا ہے بجائے اس کے کہ خاموشی سے پیسٹ شدہ کلید استعمال کرے۔ اگر آپ کو اس کے بجائے 401 نظر آئے، تو متغیر سیٹ ہے لیکن کلید غلط ہے؛ کلید اور ایڈریس کو 401/404 guide کے خلاف چیک کریں۔