בדיקת קוד וניתוח אבטחה באמצעות Gemini CLI עם תוספים

1. 📖 מבוא

194a7f6f1a93b614.png

ב-codelab הזה תלמדו את העקרונות הבסיסיים של Gemini CLI ותשתמשו בתוסף שלו לבדיקת קוד ולניתוח אבטחה בתהליך פיתוח התוכנה.

מה תלמדו

  • איך מגדירים את Gemini CLI
  • איך מגדירים את Gemini CLI
  • איך מתקינים תוסף ל-Gemini CLI
  • איך משתמשים בתוסף Gemini CLI לבדיקת קוד ולניתוח אבטחה
  • איך מגדירים את MCP ל-Gemini CLI
  • איך בודקים את Gemini CLI ב-CI/CD

מה תצטרכו

  • דפדפן האינטרנט Chrome
  • חשבון Gmail
  • פרויקט ב-Cloud שמופעל בו חשבון לחיוב

2. 🚀 הכנה להגדרת סדנת פיתוח

שלב 1: בוחרים פרויקט פעיל ב-Cloud Console

במסוף Google Cloud, בדף לבחירת הפרויקט, בוחרים או יוצרים פרויקט ב-Google Cloud (ראו את הקטע הימני העליון במסוף).

3a143645e891087.png

לוחצים עליו ורואים רשימה של כל הפרויקטים, כמו בדוגמה הזו:

59e03077d1ba2039.png

הערך שמסומן בתיבה האדומה הוא מזהה הפרויקט, והוא ישמש לאורך כל המדריך.

הקפידו לוודא שהחיוב מופעל בפרויקט שלכם ב-Cloud. כדי לבדוק את זה, לוחצים על סמל ההמבורגר ☰ בסרגל הימני העליון כדי להציג את תפריט הניווט, ומחפשים את תפריט החיוב.

973396bb9d9c3523.png

837e03fb7edafdc4.png

אם הכותרת Billing / Overview ( בפינה הימנית העליונה של מסוף Cloud ) מופיעה עם הכיתוב Google Cloud Platform Trial Billing Account, הפרויקט שלכם מוכן לשימוש במדריך הזה. אם לא, חוזרים לתחילת המדריך הזה ומממשים את תקופת הניסיון של חשבון החיוב

7f607aa026552bf5.png

שלב 2: הכרת Cloud Shell

ברוב חלקי המדריכים תשתמשו ב-Cloud Shell. לוחצים על 'הפעלת Cloud Shell' בחלק העליון של מסוף Google Cloud. אם מוצגת בקשה לאישור, לוחצים על אישור.

1829c3759227c19b.png

b8fe7df5c3c2b919.png

אחרי שמתחברים ל-Cloud Shell, צריך לבדוק אם המעטפת ( או הטרמינל) כבר מאומתת בחשבון שלנו.

gcloud auth list

אם אתם רואים את כתובת Gmail האישית שלכם כמו בדוגמה שלמטה, הכול בסדר

Credentialed Accounts

ACTIVE: *
ACCOUNT: alvinprayuda@gmail.com

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

אם לא, כדאי לרענן את הדפדפן ולוודא שלוחצים על אישור כשמופיעה הבקשה ( יכול להיות שהתהליך יופסק בגלל בעיה בחיבור).

בשלב הבא, צריך גם לבדוק אם המעטפת כבר מוגדרת למזהה הפרויקט הנכון שיש לכם. אם מופיע ערך בתוך ( ) לפני הסמל $ במסוף ( בצילום המסך שלמטה, הערך הוא "your-workshop-project"), הערך הזה מציין את הפרויקט שהוגדר עבור סשן המעטפת הפעיל.

25e65d7ad1d62de0.png

אם הערך שמוצג כבר נכון, אפשר לדלג על הפקודה הבאה. אבל אם הוא לא נכון או חסר, מריצים את הפקודה הבאה

gcloud config set project <YOUR_PROJECT_ID>

שלב 3: היכרות עם Cloud Shell Editor והגדרת ספריית העבודה של האפליקציה

עכשיו אפשר להגדיר את עורך הקוד כדי לבצע פעולות שקשורות לקוד. נשתמש ב-Cloud Shell Editor לצורך הזה

לוחצים על הלחצן Open Editor כדי לפתוח את Cloud Shell Editor b16d56e4979ec951.png.

עכשיו יוצג הממשק של Cloud Shell Editor כמו שמוצג למטה

74e9e030342164b6.png

עכשיו משכפלים את מאגר ההדגמה שאיתו נבצע אינטראקציה. קודם צריך לפתוח את הטרמינל של העורך. כדי לעשות את זה, לוחצים על Terminal -> New Terminal בסרגל התפריטים , או משתמשים בקיצור הדרך Ctrl + Shift + C. חלון טרמינל ייפתח בחלק התחתון של הדפדפן.

95e31ec63a88890d.png

מריצים את הפקודה הזו במסוף

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

אחר כך, עוברים לחלק העליון של Cloud Shell Editor ולוחצים על File->Open Folder (קובץ > פתיחת תיקייה), מאתרים את ספריית username (שם המשתמש) ואת ספריית המאגר המשוכפל code-analysis-demo, ואז לוחצים על הלחצן OK. הפעולה הזו תגדיר את הספרייה שנבחרה כספריית העבודה הראשית. בדוגמה הזו, שם המשתמש הוא alvinprayuda, ולכן נתיב הספרייה מוצג למטה

ee00d484ff2f8351.png

194f63ef6de51b9.png

עכשיו ספריית העבודה ב-Cloud Shell Editor אמורה להיראות כך:

2d53c6161b553e68.png

עכשיו אפשר לעבור לשלב הבא

3. 🚀 הגדרות ותצורות

כדי להתקין את Gemini CLI במערכת המקומית, אפשר לפעול לפי השלבים הבאים:

  1. מוודאים שבמערכת מותקנת Node מגרסה 20 ואילך
  2. כדי להפעיל את Gemini CLI:
  • התקנה כחבילה גלובלית
# 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), תופיע השאלה הבאה:

7f0f7d5091df7abb.png

אחר כך יוצגו לכם כמה אפשרויות לאימות.

7ce5c6574f249304.png

קיימות מספר אפשרויות:

  • אם בוחרים באפשרות התחברות באמצעות חשבון Google, ייפתח דף אימות של Google בדפדפן, וצריך רק לאשר אותו.
  • אם אתם מעדיפים להשתמש במפתח Gemini API, תצטרכו ליצור אותו בדף של AI Studio ואז ליצור קובץ .env בספריית העבודה עם המשתנה GEMINI_API_KEY מוגדר ( או להריץ את הפקודה export GEMINI_API_KEY="your-api-key" בשורת הפקודה).
  • אם בחרתם להשתמש ב-Vertex AI, תצטרכו פרויקט כמו שהגדרתם קודם, ליצור קובץ .env ולהגדיר את GOOGLE_CLOUD_PROJECT ואת GOOGLE_CLOUD_LOCATION.

אם רוצים לשנות את שיטות האימות האלה, אפשר להריץ את הפקודה /auth מ-Gemini CLI או לערוך את קובץ ההגדרות. אם רוצים לערוך את קובץ ההגדרות ישירות, ב-Linux הוא אמור להיות בתיקייה $HOME/.gemini/settings.json . מזינים את security וauth ועורכים אותם.

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

72300c1f781857c8.png

4. 🚀 פקודות בסיסיות וכלים מובנים

עכשיו נתנסה ב-Gemini CLI כדי לקבל מידע נוסף עליו. אם אתם מחפשים פקודה בסיסית שאפשר להשתמש בה, אתם יכולים להקליד /help כדי להציג את כל הפקודות הזמינות.

800d1b06a5ad9f9c.png

/help

יוצג פלט כמו זה f46a75c6bb177a2b.png

‫Gemini CLI הוא סוכן AI, ולכן יש לו כלים שמאפשרים לו לפתור את המשימה שהמשתמש נותן לו. כדי לראות את הכלים המובנים, מריצים את הפקודה /tools

17a6d7fcf06df563.png

/tools

יוצג פלט כמו זה:

7d22b38a387f45d0.png

אפשר לראות של-Gemini CLI יש כמה יכולות, כמו קריאה וכתיבה לקובץ, חיפוש באינטרנט ועוד. חלק מהכלים האלה דרשו אישור מהמשתמש כברירת מחדל בגלל הסיכון הפוטנציאלי

עכשיו נראה את זה בפעולה. נסו להריץ את ההנחיה הזו ב-Gemini CLI

15e2d863a4eb8df4.png

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

אפשר לראות שהיא מפעילה את הכלי GoogleSearch ואחר כך כותבת את התוצאה באמצעות הכלי WriteFile. אם אתם משתמשים ב-IDE, ההצעה תוצג כהבדל בין הקוד המקורי לקוד המוצע, ותוכלו לבחור אם לקבל או לדחות אותה. כאן אפשר לראות ש-Gemini CLI מבקש הרשאה לכתוב את הקובץ

8163f43b05ca59a3.png

5. 🚀 תוספים

כדי לשפר את התוצאה של משימה ספציפית באמצעות סוכן AI, צריך לדעת איך ליצור הנחיה מתאימה, איך לנהל הנדסת הקשר באמצעות שילוב של כלים מתאימים וכן הלאה.

התוספים ל-Gemini CLI הם הנחיות ושילובים מוכנים מראש שקל להתקין, ואפשר לקשר אותם לכלים חיצוניים. כל תוסף מכיל 'מדריך' מובנה שמסביר איך להשתמש בכלים ביעילות, והוא יכול לכלול את הרכיבים הבאים:

  • פקודות בהתאמה אישית
  • הגדרות MCP
  • קובצי הקשר

6da12f33463ac755.png

התקנת תוספי אבטחה

לדוגמה, במדריך הזה נסביר איך להתקין את התוספים code-review ו-security.

מריצים את הפקודה הבאה כדי להתקין את התוספים security מהטרמינל

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

יוצגו השאלות הבאות, פשוט מקישים על Enter כדי לאשר.

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, יופיעו 2 התוספים האלה שכבר מותקנים

88a86a0dc42fc510.png

/extensions

בסדר, עכשיו נבצע הפעלה מעשית במאגר לדוגמה ששיבטתם קודם.

6. ‫🚀 מצב אינטראקטיבי – אפליקציית תוסף לניתוח אבטחת קוד

תוסף האבטחה הוא תוסף Gemini CLI בקוד פתוח, שנועד לשפר את האבטחה של המאגר. התוסף מוסיף פקודה חדשה ל-Gemini CLI שמנתחת שינויים בקוד כדי לזהות מגוון סיכוני אבטחה ונקודות חולשה.

עכשיו נכין את מאגר ההדגמה שלנו. מריצים את הפקודה הבאה כדי לעבור לענף שבו השינויים עם סיכון האבטחה כבר הוחלו

git checkout refactor/analysis-demo

לאחר מכן מריצים את Gemini CLI במסוף

gemini

אז בואו נריץ את התוספים

e3fcf630238f9b2e.png

/security:analyze

הפעולה הזו תתחיל תהליך ארוך, ובמהלך התהליך תקבלו כמה בקשות להפסקת התהליך כדי לבקש את ההרשאה שלכם להפעיל פעולה ספציפית, כמו mkdir שמוצג בהמשך

10d6ad2ef91b5acf.png

זהו מנגנון הגנה שנועד לוודא שהמשתמשים מודעים לפעולות שיבוצעו על ידי Gemini CLI. במהלך שאר ההדרכה, תמיד תוכלו לאפשר את הגישה ( אפשרות 2).

ההרחבה הזו תפעיל תהליך ארוך טווח. תוכלו לראות שהיא יוצרת קובץ תכנון בספרייה .gemini_security, ותוכלו לראות את רשימת המשימות כדי לדעת אילו תהליכים הסתיימו ואילו לא. כמו בדוגמה הבאה:

543035cb65d27804.png

ייקח קצת זמן עד שהמשימות יסתיימו. בזמן הזה, אפשר לבדוק את המקור של התוספים האלה ב מאגר GitHub. כתובת ה-URL הזו מציגה את ההנחיה שמשמשת להפעלת כל תהליך סריקת האבטחה הזה

73f4966870bc9ddf.png

כפי שאפשר לראות, כדי לבצע את הסריקה הזו, ההנחיה היא להשתמש ב-Gemini CLI כדי לבצע בדיקה בשני שלבים: שלב הסיור ושלב הבדיקה המפורטת.

אם מופיעה ההודעה הבאה ב-Gemini CLI, אפשר לבחור באפשרות 2 כדי להשבית את זיהוי הלולאה.

a0af5e15627afa83.png

אחר כך מזינים הנחיה ל-Gemini CLI כדי להמשיך

611a7ed0fb6fc44b.png

continue

זהו מנגנון שנועד למנוע לולאות אינסופיות של קריאות לא יעילות לכלים, והוא ימשיך להשתפר עם הזמן.

אחרי שהפעולה תסתיים, הדוח יוצג במסוף האינטראקטיבי. כדי להקל על התהליך, ננחה את Gemini CLI לכתוב אותו ב-security-analysis.md

b4cbad3aaeaa8dce.png

write the result to security-analysis.md file

עכשיו אפשר לבדוק את התוצאה שנכתבה בקובץ

7. ‫🚀 מצב לא אינטראקטיבי – אפליקציית תוסף לבדיקת קוד

code-review התוסף מוסיף פקודה חדשה ל-Gemini CLI שמנתחת שינויים בקוד כדי לזהות מגוון בעיות באיכות הקוד.

אפשר להריץ את התוסף הזה במצב לא אינטראקטיבי של Gemini CLI, כלומר אפשר להריץ את כל התהליך בלי להיכנס למעטפת של Gemini CLI. כדי להריץ את Gemini CLI במצב לא אינטראקטיבי, אפשר להשתמש בתבנית הפקודה הבאה

gemini "put your command here"

עם זאת, חשוב לציין שכשמריצים במצב לא אינטראקטיבי, כל פעולה של כלי שדורשת הרשאת משתמש מושבתת. לכן, צריך להוסיף את הדגל --yolo כדי לאשר אוטומטית את כל הפעולות, כלומר להפעיל את כל הכלים במהלך המצב הלא אינטראקטיבי.

מריצים את התוסף code-review באמצעות הפקודה הבאה

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

הפקודה הזו תכתוב את התוצאה של פלט Gemini CLI לקובץ code-review.md. שימו לב לדגל -e כאן. הדגל הזה קובע איזה תוסף יופעל במהלך הסשן. במקרה הזה, אנחנו מפעילים רק את התוסף code-review ומשביתים את השאר.

התהליך ייקח זמן, אבל בסיומו תוכלו לראות תוצאה דומה לזו שמוצגת למטה, שנכתבה בקובץ ה-Markdown

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.

8. ‫🚀 תמיכה בפרוטוקול הקשר של המודל

כפי שראינו בהסברים על התוסף, Gemini CLI יכול להתחבר לשרתי MCP – אפליקציות שמספקות כלים ומשאבים באמצעות Model Context Protocol. החיבור הזה מאפשר ל-Gemini CLI ליצור אינטראקציה עם מערכות חיצוניות ומקורות נתונים באמצעות שרתי MCP כגשרים לסביבה המקומית ולשירותים חיצוניים כמו ממשקי API.

5f1cdd4be3e7b42a.png

אם אתם רוצים להגדיר בעצמכם שרת MCP, אתם צריכים לשנות את קובץ .gemini/settings.json ולהוסיף את ההגדרות הבאות :

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

במדריך הזה נגדיר חיבור לחשבון GitHub כדי לדחוף את נתוני הדוח הקודמים ל-GitHub

הגדרת שרת Github MCP

קודם ניצור את קובץ התצורה של פרויקט 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
       }
  }
}

עכשיו נצטרך את אסימון הגישה האישי שלכם ב-GitHub, לכן חשוב לוודא שכבר יש לכם חשבון ב-GitHub.

מתחברים ל-Github ועוברים אל Settings (הגדרות).

dc57f047ca9a2b83.png

אחרי זה, גוללים למטה כדי למצוא את הגדרות המפתחים ולוחצים עליהן.

59d9b700c41ca1b6.png

ואז בוחרים באפשרות Personal access tokens (אסימוני גישה אישיים) ובוחרים באפשרות Tokens (classic) (אסימונים (קלאסי)).

e96fccd80872e480.png

30ac727da307602b.png

מזינים כאן את השם של אסימון הגישה האישי ומסמנים את תיבות הסימון של ההיקפים repo.

ad167223fa231e3c.png

אחר כך גוללים למטה ולוחצים על הלחצן Generate Token (יצירת אסימון).

לוחצים על הלחצן ליצירת טוקן חדש ובוחרים באפשרות יצירת טוקן חדש (קלאסי). אחרי זה מעתיקים את הטוקן שנוצר וכותבים אותו בקובץ .gemini/settings.json

efd82711868093c0.png

לכן, הקובץ .gemini/settings.json צריך להיראות כמו בדוגמה הבאה

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

עכשיו נאמת את החיבור. מריצים את הפקודה הבאה כדי להיכנס ל-Gemini CLI

gemini

לאחר מכן, מריצים את הפקודה ‎/mcp. אמורה להופיע הודעה ש-Github MCP כבר מוגדר בצורה תקינה.

a97c9a98f07dc87c.png

/mcp

אחר כך נבדוק את החיבור של MCP על ידי שליחת הפקודה הזו

59bfd79aba7cc386.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. הפקודה הזו תקרא את התוכן של שני הקבצים ותוסיף תגובה לבקשת משיכת השינויים שקשורה לענף הזה באמצעות חיבור ה-MCP של GitHub. אחרי כן תוכלו לבדוק את כתובת ה-URL של בקשת המיזוג כדי לאמת את הפעולה.

864b859b56cfe9e7.png

9. ‫💡Gemini CLI בתהליך עבודה של CI/CD

אם אתם משתמשים ב-GitHub, אתם יכולים להטמיע בקלות את Gemini CLI בצינור ה-CI/CD שלכם באמצעות run-gemini-cliGithub Action. הוא פועל גם כסוכן אוטונומי למשימות קריטיות של כתיבת קוד שגרתיות, וגם כשותף שאפשר להקצות לו עבודה במהירות לפי דרישה

אתם יכולים להשתמש בו כדי לבצע בדיקות של בקשות משיכה, לתעדף בעיות, לבצע ניתוח ושינוי של קוד ועוד, באמצעות שיחה עם Gemini ישירות במאגרי GitHub.

אפשר לבדוק את הדוגמה לשילוב הזה בבקשת המיזוג הזו, שבה אנחנו משתמשים בתוסף האבטחה של Gemini CLI בתוך הרצת התהליך ומספקים את הביקורות כשבקשת המיזוג נוצרת.

ad2a8e8d0a15e3f5.png

3cb40f104ce6a594.png

8edb7277fa6324b.png

ef48414c02a16dfa.png

10. 💡כדאי להתנסות בתוספים אחרים ל-Gemini CLI

8a7939ee0328e6e2.png

אפשר גם לעיין בתוספים נוספים בכתובת https://geminicli.com/extensions . כדאי לעיין בו כדי לראות עוד כלים מעניינים.

11. 🧹 ניקוי

כדי לא לצבור חיובים לחשבון Google Cloud על המשאבים שבהם השתמשתם ב-Code Lab הזה:

  1. במסוף Google Cloud, עוברים לדף Manage resources.
  2. ברשימת הפרויקטים, בוחרים את הפרויקט שרוצים למחוק ולוחצים על Delete.
  3. כדי למחוק את הפרויקט, כותבים את מזהה הפרויקט בתיבת הדו-שיח ולוחצים על Shut down.