এক্সটেনশন সহ জেমিনি সিএলআই-এর মাধ্যমে কোড পর্যালোচনা এবং নিরাপত্তা বিশ্লেষণ

১. 📖 ভূমিকা

838a11ffed94b79e.png

এই কোডল্যাবে, আপনি জেমিনি সিএলআই (Gemini CLI)-এর মূল বিষয়গুলো শিখবেন এবং আপনার সফটওয়্যার ডেভেলপমেন্ট কার্যপ্রবাহে এর কোড-রিভিউ ও নিরাপত্তা বিশ্লেষণ এক্সটেনশন ব্যবহার করবেন।

আপনি যা শিখবেন

  • জেমিনি সিএলআই কীভাবে সেটআপ করবেন
  • জেমিনি সিএলআই কীভাবে কনফিগার করবেন
  • জেমিনি সিএলআই এক্সটেনশন কীভাবে ইনস্টল করবেন
  • কোড পর্যালোচনা এবং নিরাপত্তা বিশ্লেষণের জন্য কীভাবে জেমিনি সিএলআই এক্সটেনশন ব্যবহার করবেন
  • Gemini CLI-এর জন্য MCP কীভাবে কনফিগার করবেন
  • CI/CD-তে Gemini CLI কীভাবে পরিদর্শন করবেন

আপনার যা যা লাগবে

  • ক্রোম ওয়েব ব্রাউজার
  • একটি জিমেইল অ্যাকাউন্ট
  • বিলিং অ্যাকাউন্ট সক্রিয় করা একটি ক্লাউড প্রজেক্ট

২. 🚀 ওয়ার্কশপ উন্নয়ন সেটআপ প্রস্তুত করা

ধাপ ১: ক্লাউড কনসোলে সক্রিয় প্রজেক্ট নির্বাচন করুন

গুগল ক্লাউড কনসোলের প্রজেক্ট সিলেক্টর পেজে, একটি গুগল ক্লাউড প্রজেক্ট নির্বাচন করুন বা তৈরি করুন (আপনার কনসোলের উপরের বাম অংশ দেখুন)।

6da543936f051b95.png

এটিতে ক্লিক করলে, আপনি এই উদাহরণের মতো আপনার সমস্ত প্রকল্পের একটি তালিকা দেখতে পাবেন।

3c3963e0fbb5ba4f.png

লাল বাক্স দ্বারা নির্দেশিত মানটি হলো প্রজেক্ট আইডি এবং এই মানটি পুরো টিউটোরিয়াল জুড়ে ব্যবহার করা হবে।

আপনার ক্লাউড প্রজেক্টের জন্য বিলিং চালু আছে কিনা তা নিশ্চিত করুন। এটি পরীক্ষা করতে, আপনার উপরের বাম দিকের বারে থাকা বার্গার আইকনে ☰ ক্লিক করুন, যেটি নেভিগেশন মেনু দেখাবে এবং বিলিং মেনুটি খুঁজুন।

3291845833270d7f.png

ddf6f055d710f7a9.png

আপনার ক্লাউড কনসোলের উপরের বাম দিকের অংশে থাকা 'বিলিং / ওভারভিউ ' শিরোনামের অধীনে যদি "গুগল ক্লাউড প্ল্যাটফর্ম ট্রায়াল বিলিং অ্যাকাউন্ট" দেখতে পান, তাহলে আপনার প্রজেক্টটি এই টিউটোরিয়ালের জন্য ব্যবহারের জন্য প্রস্তুত। অন্যথায়, এই টিউটোরিয়ালের শুরুতে ফিরে যান এবং ট্রায়াল বিলিং অ্যাকাউন্টটি রিডিম করুন।

45539d4ac57dd995.png

ধাপ ২: ক্লাউড শেল-এর সাথে পরিচিত হন

টিউটোরিয়ালের বেশিরভাগ অংশেই আপনি ক্লাউড শেল ব্যবহার করবেন। গুগল ক্লাউড কনসোলের উপরে থাকা ‘Activate Cloud Shell’-এ ক্লিক করুন। যদি এটি আপনাকে অনুমোদন করতে বলে, তাহলে ‘Authorize’-এ ক্লিক করুন।

26f20e837ff06119.png

79b06cc89a99f840.png

ক্লাউড শেলে সংযুক্ত হওয়ার পর, আমাদের যাচাই করে দেখতে হবে যে শেলটি (বা টার্মিনালটি) আমাদের অ্যাকাউন্ট দিয়ে আগে থেকেই প্রমাণীকৃত আছে কি না।

gcloud auth list

আপনার ব্যক্তিগত জিমেইল যদি নিচের উদাহরণের মতো আউটপুট দেখায়, তাহলে সবকিছু ঠিক আছে।

Credentialed Accounts

ACTIVE: *
ACCOUNT: alvinprayuda@gmail.com

To set the active account, run:
    $ gcloud config set account `ACCOUNT`

অন্যথায়, আপনার ব্রাউজার রিফ্রেশ করার চেষ্টা করুন এবং অনুরোধ করা হলে ' Authorize'- এ ক্লিক করুন (সংযোগ সমস্যার কারণে এটি বাধাগ্রস্ত হতে পারে)।

ধাপ ৩: ক্লাউড শেল এডিটর সম্পর্কে জানুন এবং অ্যাপ্লিকেশন ওয়ার্কিং ডিরেক্টরি সেটআপ করুন।

এখন, আমরা কোডিং করার জন্য আমাদের কোড এডিটর সেট আপ করতে পারি। এর জন্য আমরা ক্লাউড শেল এডিটর ব্যবহার করব।

আমাদের সেই ডেমো রিপোজিটরিটি ক্লোন করতে হবে যা আমরা ব্যবহার করব। রিপোজিটরিটি ক্লোন করতে এবং ক্লাউড শেল এডিটর খুলতে টার্মিনালে এই কমান্ডটি চালান।

git clone https://github.com/alphinside/gemini-cli-code-analysis-demo.git code-analysis-demo && cloudshell ws code-analysis-demo

এখন, আপনার ক্লাউড শেল এডিটর ওয়ার্কিং ডিরেক্টরি দেখতে এইরকম হবে।

3a72d901f5e78fcf.png

এরপর, আপনাকে নিশ্চিত করতে হবে যে শেলটি আপনার সঠিক প্রজেক্ট আইডিতে আগে থেকেই কনফিগার করা আছে কিনা। যদি আপনি টার্মিনালে $ আইকনের আগে ( ) বন্ধনীর ভিতরে কোনো মান দেখতে পান (নিচের স্ক্রিনশটে, মানটি হলো "your-workshop-project") , তাহলে এই মানটি আপনার সক্রিয় শেল সেশনের জন্য কনফিগার করা প্রজেক্টটি নির্দেশ করে।

8785d925a094c260.png

প্রদর্শিত মানটি যদি ইতিমধ্যেই সঠিক হয়, তাহলে আপনি পরবর্তী কমান্ডটি এড়িয়ে যেতে পারেন। তবে যদি এটি সঠিক না হয় বা অনুপস্থিত থাকে, তাহলে নিম্নলিখিত কমান্ডটি চালান।

gcloud config set project <YOUR_PROJECT_ID>

এখন আমরা পরবর্তী ধাপে যেতে পারি।

৩. 🚀 সেটআপ এবং কনফিগারেশন

আপনি যদি আপনার স্থানীয় সিস্টেমে Gemini CLI ইনস্টল করতে চান, তাহলে এই ধাপগুলো অনুসরণ করতে পারেন:

  1. আপনার সিস্টেমে নোড ভার্সন ২০ বা তার বেশি আছে কিনা তা নিশ্চিত করুন।
  2. নিম্নলিখিত যেকোনো একটি উপায়ে জেমিনি সিএলআই সক্রিয় করুন:
  • এটিকে একটি গ্লোবাল প্যাকেজ হিসাবে ইনস্টল করা
# Install as an executor

npm install -g @google/gemini-cli

# then run it from terminal
gemini
  • অথবা সর্বদা সর্বশেষ সংস্করণ পেতে সরাসরি উৎস থেকে এটি চালান।
npx https://github.com/google-gemini/gemini-cli

আপনি যখন এটি প্রথমবার চালাবেন, তখন এটি আপনাকে কয়েকটি প্রশ্ন জিজ্ঞাসা করবে। যদি আপনি এটি কোনো IDE (যেমন VSCode) থেকে চালান, তাহলে এটি আপনাকে নিম্নলিখিত প্রশ্নটি জিজ্ঞাসা করবে।

91769e12a6214c89.png

এরপর, এটি প্রমাণীকরণের জন্য আপনাকে কয়েকটি বিকল্প জিজ্ঞাসা করবে।

61ba181d61e506dc.png

বেশ কয়েকটি বিকল্প রয়েছে:

  • আপনি যদি ‘লগইন উইথ গুগল’ বেছে নেন, তাহলে ব্রাউজারে একটি গুগল অথেন্টিকেশন পেজ খুলে যাবে এবং আপনাকে শুধু সেটি গ্রহণ করতে হবে।
  • আপনি যদি জেমিনি এপিআই কী (Gemini API Key) ব্যবহার করতে চান, তাহলে আপনাকে এআই স্টুডিও (AI Studio) পেজে একটি কী তৈরি করতে হবে এবং তারপর আপনার ওয়ার্কিং ডিরেক্টরিতে GEMINI_API_KEY ভেরিয়েবলটি সেট করে একটি .env ফাইল তৈরি করতে হবে (অথবা কমান্ড লাইনে export GEMINI_API_KEY="your-api-key" কমান্ডটি চালাতে হবে)।
  • আপনি যদি Vertex AI ব্যবহার করতে চান, তাহলে আপনাকে পূর্বে সেটআপ করা একটি প্রজেক্টের মতো একটি প্রজেক্ট তৈরি করতে হবে, .env ফাইল তৈরি করতে হবে এবং GOOGLE_CLOUD_PROJECTGOOGLE_CLOUD_LOCATION সেট করতে হবে।

আপনি যদি এই প্রমাণীকরণ পদ্ধতিগুলো পরিবর্তন করতে চান, তাহলে Gemini CLI থেকে /auth কমান্ডটি চালাতে পারেন অথবা কনফিগারেশন ফাইলটি সম্পাদনা করতে পারেন। আপনি যদি সরাসরি কনফিগারেশন ফাইলটি সম্পাদনা করতে চান, তাহলে Linux-এ এটি $HOME/.gemini/settings.json এ থাকার কথা। সেখানে আপনি security এবং auth type দেখতে পাবেন এবং তা সম্পাদনা করতে পারবেন।

{
  "security": {
    "auth": {
      "selectedType": "vertex-ai" # or "gemini-api-key" or "oauth-personal"
    }
  }
}

2b894cdf68057d6a.png

৪. 🚀 মৌলিক কমান্ড এবং অন্তর্নির্মিত সরঞ্জাম

এখন, জেমিনি সিএলআই সম্পর্কে আরও জানতে চলুন এটি নিয়ে একটু ঘাঁটাঘাঁটি করা যাক। জেমিনি সিএলআই-তে প্রবেশ করতে টার্মিনালে নিম্নলিখিত কমান্ডটি চালান।

gemini

আপনি যদি ব্যবহারযোগ্য কোনো সাধারণ কমান্ড খুঁজে থাকেন, তাহলে উপলব্ধ সমস্ত কমান্ড দেখতে /help টাইপ করতে পারেন।

d4776f0c740ad723.png

/help

আপনি এই ধরনের আউটপুট দেখতে পাবেন 290d620f3787b3d0.png

জেমিনি সিএলআই একটি এআই এজেন্ট, তাই ব্যবহারকারীর দেওয়া কাজটি সমাধান করার জন্য এতে বিভিন্ন টুল সজ্জিত থাকবে। এর অন্তর্নির্মিত টুলগুলো দেখতে, /tools কমান্ডটি চালান।

7367214e26b0da86.png

/tools

এটি আপনাকে এইরকম আউটপুট দেখাবে

363ae783ae902fe4.png

আপনি দেখতে পাচ্ছেন যে, জেমিনি সিএলআই-এর ফাইলে পড়া ও লেখা, ওয়েব সার্চ এবং আরও অনেক কিছুর মতো বেশ কিছু ক্ষমতা রয়েছে। সম্ভাব্য ঝুঁকির কারণে এই টুলগুলোর কয়েকটির জন্য ডিফল্টভাবে ব্যবহারকারীর সম্মতির প্রয়োজন হয়।

এবার চলুন এটি বাস্তবে দেখি, Gemini CLI-তে এই প্রম্পটগুলো চালানোর চেষ্টা করুন।

be23caafc0184a6d.png

Find top 10 OWASP security issue and write it down to owasp.md

আপনি দেখবেন, এটি প্রথমে GoogleSearch টুলটি চালু করবে এবং পরে WriteFile টুল ব্যবহার করে ফলাফলটি লিখে রাখবে। আর আপনি যদি IDE ব্যবহার করেন, তাহলে দেখবেন যে সাজেশনগুলো গ্রহণ করবেন নাকি প্রত্যাখ্যান করবেন, সেই সিদ্ধান্ত নেওয়ার জন্য একটি diff এবং display অপশন দেখানো হবে। এখানে আপনি দেখতে পাচ্ছেন যে, Gemini CLI ফাইলটি লেখার জন্য আপনার কাছে অনুমতি চাইছে।

724bc8144b51752e.png

৫. 🚀 এক্সটেনশন

একটি এআই এজেন্টের সাহায্যে কোনো নির্দিষ্ট কাজের আউটপুট উন্নত করার ক্ষেত্রে চ্যালেঞ্জিং বিষয়গুলো হলো, কীভাবে একটি যথাযথ প্রম্পট তৈরি করা যায়, সঠিক টুলস ইন্টিগ্রেশনের মাধ্যমে যথাযথ কনটেক্সট ইঞ্জিনিয়ারিং পরিচালনা করা যায় ইত্যাদি।

জেমিনি সিএলআই এক্সটেনশন হলো পূর্ব-প্যাকেজ করা এবং সহজে ইনস্টলযোগ্য কিছু প্রম্পট ও ইন্টিগ্রেশন, যা বাহ্যিক টুলগুলোর সাথে সংযোগ স্থাপন করতে পারে। প্রতিটি এক্সটেনশনে টুলগুলো কার্যকরভাবে ব্যবহার করার জন্য একটি অন্তর্নির্মিত 'প্লেবুক' থাকে এবং এটি নিম্নলিখিত উপাদানগুলো দ্বারা গঠিত হতে পারে:

  • কাস্টম স্ল্যাশ কমান্ড
  • এমসিপি কনফিগারেশন
  • প্রসঙ্গ ফাইল

cfe24ebe1dfb0152.png

নিরাপত্তা এক্সটেনশন ইনস্টল করা

উদাহরণস্বরূপ, এই টিউটোরিয়ালে আমরা দেখব কিভাবে code-review এবং security এক্সটেনশন ইনস্টল করা যায়।

টার্মিনাল থেকে security এক্সটেনশনগুলো ইনস্টল করতে নিম্নলিখিত কমান্ডটি চালান।

gemini extensions install https://github.com/gemini-cli-extensions/security

এটি নিম্নলিখিত প্রশ্নগুলি দেখাবে, গ্রহণ করতে শুধু এন্টার চাপুন।

Installing extension "gemini-cli-security".
**Extensions may introduce unexpected behavior. Ensure you have investigated the extension source and trust the author.**
This extension will run the following MCP servers:
  * securityServer (local): node /home/alvinprayuda/.gemini/extensions/gemini-cli-security/mcp-server/dist/security.js
This extension will append info to your gemini.md context using GEMINI.md
Do you want to continue? [Y/n]:
Extension "gemini-cli-security" installed successfully and enabled.

কোড রিভিউ এক্সটেনশন ইনস্টল করা

এবং এরপরে, code-review এক্সটেনশনটি ইনস্টল করতে, নিচের কমান্ডটি চালান।

gemini extensions install https://github.com/gemini-cli-extensions/code-review

কাজ শেষ হলে, আবার Gemini CLI চালান।

gemini

এবং /extensions কমান্ডটি চালান, আপনি দেখতে পাবেন এই দুটি এক্সটেনশন আগে থেকেই ইনস্টল করা আছে।

571556bdc2b3e914.png

/extensions

আচ্ছা, এবার আপনি আগে ক্লোন করা স্যাম্পল রিপোটিতে একটি বাস্তব প্রয়োগ করে দেখা যাক।

৬. 🚀 ইন্টারেক্টিভ মোড - কোড নিরাপত্তা বিশ্লেষণ এক্সটেনশন অ্যাপ্লিকেশন

সিকিউরিটি এক্সটেনশন হলো একটি ওপেন-সোর্স জেমিনি সিএলআই এক্সটেনশন, যা রিপোজিটরির নিরাপত্তা বাড়ানোর জন্য তৈরি করা হয়েছে। এই এক্সটেনশনটি জেমিনি সিএলআই-তে একটি নতুন কমান্ড যোগ করে, যা বিভিন্ন ধরনের নিরাপত্তা ঝুঁকি এবং দুর্বলতা শনাক্ত করার জন্য কোডের পরিবর্তন বিশ্লেষণ করে।

এখন প্রথমে আমাদের ডেমো রিপোজিটরি প্রস্তুত করা যাক, নিম্নলিখিত কমান্ডটি চালিয়ে সেই ব্রাঞ্চে যান যেখানে নিরাপত্তা ঝুঁকিযুক্ত পরিবর্তনগুলো ইতিমধ্যে প্রয়োগ করা হয়েছে।

git checkout refactor/analysis-demo

এরপর টার্মিনালে Gemini CLI চালান।

gemini

তাহলে চলুন এক্সটেনশনগুলো চালানো যাক।

aab23afb4f4bfb3.png

/security:analyze

এটি একটি দীর্ঘস্থায়ী প্রক্রিয়া শুরু করবে এবং প্রক্রিয়া চলাকালীন আপনি বেশ কয়েকটি বাধা পাবেন, যা নিচে দেখানো mkdir মতো নির্দিষ্ট অপারেশন চালানোর জন্য আপনার অনুমতি চাইবে।

f889f7aca882f87d.png

এটি একটি সুরক্ষা ব্যবস্থা, যা নিশ্চিত করে যে Gemini CLI দ্বারা কী কী সম্পাদিত হবে সে সম্পর্কে ব্যবহারকারীরা অবগত থাকেন। এই টিউটোরিয়ালের বাকি অংশের জন্য, আপনি সর্বদা এটির অনুমতি দিতে পারেন (বিকল্প ২)।

এই এক্সটেনশনটি একটি দীর্ঘস্থায়ী প্রসেস চালু করবে, আপনি দেখতে পাবেন এটি .gemini_security ডিরেক্টরির ভেতরে একটি প্ল্যানিং ফাইল তৈরি করছে এবং কোন প্রসেসটি সম্পন্ন হয়েছে বা হয়নি তার চেকলিস্টও দেখতে পারবেন। যেমনটি নিচের এই উদাহরণে দেখানো হয়েছে:

bf7f9e885f15ff89.png

এর কাজগুলো শেষ হতে কিছুটা সময় লাগবে, অপেক্ষা করার সময় আমরা গিটহাব রিপোজিটরিতে এই এক্সটেনশনগুলোর সোর্স চেক করতে পারি। এই ইউআরএলটিতে সেই প্রম্পটটি দেখা যায়, যা এই সমস্ত সিকিউরিটি স্ক্যানিং প্রক্রিয়াগুলো চালানোর জন্য ব্যবহৃত হয়।

e5592755fcdf5a64.png

আপনি সেখানে দেখতে পাচ্ছেন, এই স্ক্যানিংটি করার জন্য জেমিনি সিএলআই (Gemini CLI) প্রম্পটটি দুই-ধাপের চেকিং করে, যথা রিকনসান্স পাস (Reconnaissance Pass) এবং আরও বিস্তারিত ইনভেস্টিগেশন পাস (Investigation Pass)।

আপনি যদি Gemini CLI-তে নিম্নলিখিত প্রম্পটটি দেখতে পান, তাহলে লুপ ডিটেকশন নিষ্ক্রিয় করতে বিকল্প ২ বেছে নিতে পারেন।

74426d4ae8fae006.png

তারপর চালিয়ে যাওয়ার জন্য Gemini CLI-কে নির্দেশ দিন।

3ea7391ccbf2b872.png

continue

এটি অন্তহীন ও অনুৎপাদনশীল টুল কলিং লুপ এড়ানোর একটি কৌশল এবং সময়ের সাথে সাথে এটিকে আরও উন্নত করা হবে।

কাজ শেষ হলে, এটি ইন্টারেক্টিভ টার্মিনালে রিপোর্টটি দেখাবে, এই কাজটি সহজ করার জন্য চলুন Gemini CLI-কে এটি security-analysis.md ফাইলে লেখার নির্দেশ দিই।

86fcc1c406100224.png

write the result to security-analysis.md file

এখন আপনি ফাইলে লেখা ফলাফলটি যাচাই করতে পারেন।

৭. 🚀 নন-ইন্টারেক্টিভ মোড - কোড রিভিউ এক্সটেনশন অ্যাপ্লিকেশন

code-review এক্সটেনশনটি জেমিনি সিএলআই-তে একটি নতুন কমান্ড যোগ করে, যা কোডের পরিবর্তন বিশ্লেষণ করে বিভিন্ন ধরনের কোডের মানগত সমস্যা শনাক্ত করে।

এই এক্সটেনশনটি জেমিনি সিএলআই নন-ইন্টারেক্টিভ মোডে চালানো যায়, যার অর্থ হলো জেমিনি সিএলআই শেল-এ প্রবেশ না করেই সম্পূর্ণ প্রক্রিয়াটি সম্পন্ন করা যায়। জেমিনি সিএলআই নন-ইন্টারেক্টিভ মোডে চালানোর জন্য আপনি নিম্নলিখিত কমান্ড প্যাটার্নটি ব্যবহার করতে পারেন।

gemini "put your command here"

তবে, এটি মনে রাখা গুরুত্বপূর্ণ যে, নন-ইন্টারেক্টিভ মোডে চালালে ব্যবহারকারীর অনুমতির প্রয়োজন এমন যেকোনো টুলের কার্যক্রম নিষ্ক্রিয় হয়ে যাবে, তাই সমস্ত ক্রিয়া স্বয়ংক্রিয়ভাবে অনুমোদনের জন্য আমাদের --yolo ফ্ল্যাগটি যোগ করতে হবে, যার অর্থ নন-ইন্টারেক্টিভ মোডে থাকাকালীন সমস্ত টুল সক্রিয় করা।

আপনি যদি ক্লাউডশেলে এই yolo ফ্ল্যাগটি চালান, তাহলে সিস্টেমের ডিফল্ট কনফিগারেশন আপনাকে এটি চালাতে বাধা দেবে এবং এই ত্রুটি বার্তাটি দেখাবে।

Cannot start in YOLO mode when it is disabled by settings

ওয়ার্কস্পেস লেভেল কনফিগারেশন ফাইল সেট করতে নিম্নলিখিত কমান্ডটি চালান।

mkdir .gemini && cloudshell edit .gemini/settings.json

এখন, এডিটরে settings.json ফাইলটি খুলুন, yolo মোড চালু করতে নিচের কনফিগারেশনটি কপি করুন।

{
    "security": {
        "disableYoloMode": false
    }
}

এখন, নিচের কমান্ডটি দিয়ে code-review এক্সটেনশনটি রান করা যাক।

gemini "/code-review" --yolo -e code-review > code-review.md

এই কমান্ডটি Gemini CLI আউটপুটের ফলাফল code-review.md ফাইলে লিখবে। এখানে -e ফ্ল্যাগটি লক্ষ্য করুন, এই ফ্ল্যাগটি সেশন চলাকালীন কোন এক্সটেনশনটি সক্রিয় করা হবে তা নিয়ন্ত্রণ করে। এখানে আমরা শুধুমাত্র code-review এক্সটেনশনটি সক্রিয় করছি এবং বাকিগুলো নিষ্ক্রিয় করে দিচ্ছি।

এতে কিছুটা সময় লাগবে, কিন্তু এটি শেষ হওয়ার পর, আপনি মার্কডাউন ফাইলে নিচে দেখানো ছবির মতো ফলাফল দেখতে পাবেন।

Here are the results of the code review.

While the recent changes to rename `get_products` and `get_product` to `GetProducts` and `GetProduct` are minor, the codebase has some inconsistencies in its naming conventions. For instance, other functions like `create_product` use `snake_case`, while the newly renamed functions use `PascalCase`. For better code quality and readability, I recommend using a consistent naming convention throughout the project.

More importantly, I have identified several security vulnerabilities in the `main.py` file. Here is a summary of the findings:

### 1. SQL Injection
*   **Severity**: High
*   **Location**: 
    *   `main.py:99` in `get_products_by_category`
    *   `main.py:146` in `search_products`
    *   `main.py:372` in `get_user_transactions`
    *   `main.py:438` in `adjust_inventory_by_query`
*   **Description**: The endpoints directly use f-strings to construct SQL queries, making them vulnerable to SQL injection attacks. An attacker could manipulate the input to execute arbitrary SQL commands, potentially leading to data breaches or unauthorized modifications.
*   **Recommendation**: Use parameterized queries or an ORM to handle database interactions. This will ensure that user input is properly sanitized and prevent SQL injection attacks.

### 2. Server-Side Request Forgery (SSRF)
*   **Severity**: High
*   **Location**: `main.py:265` in `fetch_url`
*   **Description**: The `fetch_url` endpoint allows users to specify an arbitrary URL, which the server then requests. This can be exploited to make requests to internal services or local files, leading to information disclosure or other security breaches.
*   **Recommendation**: Implement a whitelist of allowed domains or protocols to restrict the URLs that can be requested. Additionally, you can disable redirects and use a timeout to limit the impact of an attack.

### 3. Information Exposure
*   **Severity**: Medium
*   **Location**: `main.py:423` in `get_environment_variables`
*   **Description**: The `get_environment_variables` endpoint exposes all environment variables to the user. This can include sensitive information such as API keys, database credentials, and other secrets.
*   **Recommendation**: Remove this endpoint or restrict access to it to authorized users. If you need to expose some environment variables, do so selectively and avoid exposing sensitive information.

৮. 🚀 মডেল কনটেক্সট প্রোটোকল সাপোর্ট

এখন, আমরা এক্সটেনশন ব্যাখ্যায় যেমনটা আগে দেখেছি, জেমিনি সিএলআই এমসিপি সার্ভারের সাথে সংযোগ স্থাপন করতে পারে—এগুলো হলো এমন অ্যাপ্লিকেশন যা মডেল কনটেক্সট প্রোটোকলের মাধ্যমে বিভিন্ন টুল ও রিসোর্স সরবরাহ করে। এই সংযোগ জেমিনি সিএলআই-কে আপনার স্থানীয় পরিবেশ এবং এপিআই-এর মতো বাহ্যিক পরিষেবাগুলোর সাথে সেতু হিসেবে এমসিপি সার্ভার ব্যবহার করে বাহ্যিক সিস্টেম এবং ডেটা উৎসের সাথে যোগাযোগ করতে সাহায্য করে।

7d8738ee9c079aa1.png

আপনি যদি নিজের এমসিপি সার্ভার সেটআপ করতে চান, তাহলে আপনাকে আপনার .gemini/settings.json ফাইলটি পরিবর্তন করতে হবে এবং নিম্নলিখিত কনফিগারেশনগুলো যোগ করতে হবে:

{
    ...
    # Previous settings above if any
    "mcpServers": {
       "server_name": {
           # MCP server configurations here
       }
    }
}

এই টিউটোরিয়ালের জন্য, পূর্ববর্তী রিপোর্টের ডেটা গিটহাবে পুশ করতে আমাদের গিটহাব অ্যাকাউন্টের সাথে সংযোগ স্থাপন করা যাক।

গিটহাব এমসিপি সার্ভার কনফিগার করা

প্রথমে, চলুন আমাদের Gemini CLI প্রোজেক্ট কনফিগারেশন ফাইলটি তৈরি করে নিই। নিচের কমান্ডটি চালান।

mkdir -p .gemini && touch .gemini/settings.json

এরপর .gemini/settings.json ফাইলটি খুলুন এবং নিম্নলিখিত কনফিগারেশন দিয়ে এটি পূরণ করুন।

{
  "mcpServers": {
       "github": {
            "httpUrl": "https://api.githubcopilot.com/mcp/",
            "headers": {
                "Authorization": "your-personal-access-token"
            },
            "timeout": 5000
       }
  }
}

এখন, এখানে আপনার নিজের গিটহাব ব্যক্তিগত অ্যাক্সেস টোকেন প্রয়োজন হবে, তাই নিশ্চিত করুন যে আপনার ইতিমধ্যেই একটি গিটহাব অ্যাকাউন্ট আছে।

আপনার গিটহাবে লগইন করুন এবং সেটিংসে যান

c7d83d4e503602e2.png

এরপরে, নিচে স্ক্রল করে ডেভেলপার সেটিংস খুঁজুন এবং তাতে ক্লিক করুন।

c6c9bfafe5021b9e.png

তারপর ব্যক্তিগত অ্যাক্সেস টোকেনগুলিতে যান এবং টোকেন (ক্লাসিক) বিকল্পটি বেছে নিন।

e21f0ed9f361fc13.png

c3c26d7f41c51e1c.png

এখানে আপনার ব্যক্তিগত অ্যাক্সেস টোকেনের নাম দিন এবং রিপো স্কোপগুলো পরীক্ষা করুন।

b0830480eaf3c15d.png

তারপর নিচে স্ক্রোল করুন এবং জেনারেট টোকেন বোতামে ক্লিক করুন, নিশ্চিত করুন যে আপনি

'Generate new token' বোতামে ক্লিক করুন এবং 'Generate new token (classic)' বিকল্পটি নির্বাচন করুন। এরপর, তৈরি হওয়া টোকেনটি কপি করে .gemini/settings.json ফাইলে লিখুন।

30d1ea92bb24a7ba.png

সুতরাং, আপনার .gemini/settings.json ফাইলটি নিচের উদাহরণের মতো দেখতে হবে।

{
  "mcpServers": {
       "github": {
            "httpUrl": "https://api.githubcopilot.com/mcp/",
            "headers": {
                "Authorization": "ghp-xxxx"
            },
            "timeout": 5000
       }
  }
}

এখন, সংযোগটি যাচাই করা যাক। এই কমান্ডটি চালিয়ে Gemini CLI-তে প্রবেশ করুন।

gemini

এরপর, /mcp কমান্ডটি চালান, আপনি দেখবেন যে গিটহাব এমসিপি ইতিমধ্যেই সঠিকভাবে কনফিগার করা আছে।

1e9c8585ecb39ccb.png

/mcp

তাহলে চলুন এই কমান্ডটি সাবমিট করে MCP কানেকশনটি পরীক্ষা করে দেখি।

70e045049e8792a8.png

Aggregate the findings from @code-review.md and @security-analysis.md into a single report and ensure no duplicates issues reported. Post this report as a comment on the relevant pull request for the current git branch on GitHub and display the pull request URL for manual review

এখানে @code-review.md এবং @security-analysis.md চিহ্নগুলো লক্ষ্য করুন, এভাবেই আমরা Gemini CLI-তে পাঠানোর জন্য ফাইলগুলোকে রেফারেন্স করি। এই কমান্ডটি উভয় ফাইলের কন্টেন্ট পড়বে এবং Github MCP কানেকশন ব্যবহার করে এই ব্রাঞ্চ সম্পর্কিত পুল রিকোয়েস্টে একটি কমেন্ট পুশ করবে। এরপর আপনি পুল রিকোয়েস্ট URL-টি চেক ইন করে তা যাচাই করতে পারেন।

f6483c19e27d4d1c.png

৯. 💡CI/CD ওয়ার্কফ্লোতে জেমিনি সিএলআই

আপনি যদি একজন গিটহাব ব্যবহারকারী হন, তাহলে run-gemini-cli গিটহাব অ্যাকশনটি ব্যবহার করে সহজেই আপনার CI/CD পাইপলাইনে Gemini CLI যুক্ত করতে পারেন। এটি গুরুত্বপূর্ণ রুটিন কোডিং কাজের জন্য একটি স্বায়ত্তশাসিত এজেন্ট এবং একজন অন-ডিমান্ড সহযোগী উভয় হিসেবেই কাজ করে, যাকে আপনি দ্রুত কাজ অর্পণ করতে পারেন।

আপনি জেমিনি ব্যবহার করে সরাসরি গিটহাব রিপোজিটরির ভেতরে কথোপকথনের মাধ্যমে পুল রিকোয়েস্ট রিভিউ, ইস্যু বাছাই, কোড বিশ্লেষণ ও পরিবর্তন এবং আরও অনেক কিছু করতে পারেন।

এই ইন্টিগ্রেশনের উদাহরণ এই পুল রিকোয়েস্টটিতে দেখা যেতে পারে, যেখানে আমরা রানারের ভিতরে Gemini CLI Security এক্সটেনশনটি ব্যবহার করি এবং পুল রিকোয়েস্টটি তৈরি করার সময় রিভিউ প্রদান করি।

bc58be84fcbb313a.png

da9e2cde49cbebe5.png

3deda99e8a7fa4d3.png

d933d6b31b42e582.png

১০. 💡অন্যান্য জেমিনি সিএলআই এক্সটেনশনগুলি অন্বেষণ করুন

dd25e5619e91ad0b.png

আপনি https://geminicli.com/extensions -এ আরও এক্সটেনশন দেখতে পারেন। আরও আকর্ষণীয় টুলসের জন্য এটি দেখুন!

১১. 🧹 পরিষ্কার করা

এই কোডল্যাবে ব্যবহৃত রিসোর্সগুলির জন্য আপনার গুগল ক্লাউড অ্যাকাউন্টে চার্জ হওয়া এড়াতে, এই ধাপগুলি অনুসরণ করুন:

  1. গুগল ক্লাউড কনসোলে, রিসোর্স পরিচালনা (Manage resources) পৃষ্ঠায় যান।
  2. প্রজেক্ট তালিকা থেকে, আপনি যে প্রজেক্টটি মুছতে চান সেটি নির্বাচন করুন এবং তারপর ডিলিট বোতামে ক্লিক করুন।
  3. ডায়ালগ বক্সে প্রজেক্ট আইডি টাইপ করুন এবং তারপর প্রজেক্টটি মুছে ফেলার জন্য 'শাট ডাউন'-এ ক্লিক করুন।