requirements.txt - התקנת pip requirements.txt - הקפאת pip requirements.txt

סכנות נסתרות של Requirements.txt: כיצד הצמדת תלויות יכולה להציל אותך

requirements.txt: כלי ליבה או איום נסתר?

בכל פרויקט של פייתון יש את זה. זה שנראה תמים requirements.txt הקובץ, שיושב בשורש המאגר שלך pip install requirements.txt consumes, היא רשימה של תלויות, בוודאי, אבל אם לא תיזהרו, היא יכולה להיות גם דלת פתוחה לרווחה לבניות לא יציבות, חבילות פגיעות ובעיות אבטחה חמורות.

בבסיס שלו, דרישות. טקסט שולט באילו חבילות צד שלישי היישום שלך מושך. כאשר אתה מפעיל pip להתקין- requirements.txtמנהל החבילות של Python מתקין כל תלות המופיעה ברשימה. אבל הנה העניין: אם לא תצמידו גרסאות מדויקות, אתם... אמון ב-PyPI כדי תמיד להציג גרסה בטוחה, תואמת ולא משתנה, בכל פעם. כך לא עובדת AppSec מודרנית.

ללא הצמדה, קבצי build עלולים להיכשל. גרוע מכך, האפליקציה שלך עלולה לבלוע חבילות זדוניות מבלי משים. ניהול גרסאות פתוח (בקבוק >=1.0, לדוגמה) או אילוצי גרסה רופפים (דג'נגו~=3.2) מהווים קרקע פורייה להזרקת קוד לא מאובטח. זו הסיבה שניהול נכון דרישות. טקסט היא משימת אבטחה מרכזית.

היכן קיפאת pip ופירוט requirements.txt של התקנת pip

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

עכשיו דמיינו שחבר לקבוצה, או ה-CI שלכם, רץ בעיוורון pip להתקין- requirements.txtאם קובץ זה כולל קבצים מיושנים, פגיעים או אפילו חבילות עם שגיאות הקלדה, זה עתה ביצעת אוטומציה של אירוע אבטחה.

דוגמה מהירה:

				
					# Developer's freeze output
pip freeze > requirements.txt
boto3==1.24.20
requests==2.27.1

				
			

⚠️ דוגמה לא מאובטחת, אין להשתמש בה בסביבת ייצור

עכשיו תוסיפו את זה ל-CI שלכם pipeline:

				
					- name: Install dependencies
run: pip install -r requirements.txt
				
			

אתה סומך על כך שהסביבה ניתנת לשחזור, ששום דבר לא השתנה ב-PyPI, וש... כל תלות עדיין מאובטח. זוהי הנחה משמעותית כשמסתמכים על דרישות להקפאת pips.txt זרימות עבודה.

איומי AppSec אמיתיים: Typosquatting ובלבול תלות בקובץ requirements.txt

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

  • Tposposquattingהעלאת חבילה זדונית בשם כמו בקשות במקום בקשותדמות אחת פחות והבנייה שלך בבעלותך.

בקשות # ⚠️ דוגמה להמחשה, לא חבילה אמיתית להתקנה

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

שתי ההתקפות מנצלות חוסר בהצמדה קפדנית ובקרת מקור ב- דרישות. טקסטאם שלך רק אומר ספרייה פנימית מסוימת, ואתה רץ דרישות התקנת pip.txt ב-CI, זה עלול לאחזר את החבילה הלא נכונה מהמקום הלא נכון.

קובץ requirements.txt של אבטחה ב- CI/CD Pipelineעם גיבוב ופינינג

הנה איך להקשיח דרישות. טקסט נגד איומים מהעולם האמיתי:

  • הצמד גרסאות מדויקות: השתמש תמיד == עבור כל חבילה אצלך דרישות. טקסטאין תווים כלליים, אין טווחים.
  • השתמש –דרישת-גיבוביםזה גורם pip להתקין- requirements.txt לאמת את שלמות כל חבילה שהורדת.

דוגמא:

				
					flask==2.2.5 \
--hash=sha256:<actual_hash_here> 
				
			

⚠️ דוגמה להדגמה, החלפה ב-hash אמיתי בפרויקטים בפועל

  • בידוד הבניינים שלךתמיד בנו במיכלים נקיים ומינימליסטיים. לעולם אל תסמכו על תמונת הבסיס באופן עיוור.
  • השתמש באינדקס PyPI פרטי: אחסנו פרוקסי/מטמון משלכם ושיקפו רק חבילות מהימנות.

הפעל סריקות תלותשילוב כלים כמו ביקורת פיפס או שימוש SBOMניתוח מבוסס-ב שלך pipelines.

דוגמה לקטע פעולות ב-GitHub:

				
					- name: Secure install
  run: pip install --require-hashes -r requirements.txt
				
			

⚠️ חינוכי pipeline לדוגמה, להתאים את עצמך לסביבה שלך

טיפול קפדני ב pip להתקין- requirements.txt in CI/CD זוהי אחת הדרכים הקלות ביותר להפחית את הסיכון בקוד פתוח.

בניינים ניתנים לשחזור: שמירה על יציבותם בסביבות שונות

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

השתמשו באסטרטגיות הבאות:

  • כלי pip: להשתמש pip-קומפיל לייצר דרישות. טקסט מ דרישות.בזה פותר תלויות באמצעות הצמדה נכונה.
  • סמני סביבהעבור חבילות ספציפיות למערכת הפעלה או תלויות ספציפיות לגרסת Python, השתמשו בסמנים כמו מערכת_פלטפורמה == 'לינוקס'.
  • אחסון במטמון של Dockerב-CI, אחסן במטמון את שכבות ה-Docker שלך לאחר התקנת תלויות מ דרישות. טקסט כדי להפחית את השונות בבנייה.

דוגמה עם כלי PIP:

				
					# requirements.in
flask

# Compile
pip-compile requirements.in

				
			

⚠️ דוגמה להדגמה, התפוקה בפועל תלויה בסביבה שלך

הפלט הוא מוצמד לחלוטין דרישות. טקסט.

כלים כמו הקפאת פיפ, בשילוב עם pip להתקין- requirements.txt במהלך הבנייה, דורשים משמעת ואמצעי זהירות נוספים.

סיכום: שמירה על דרישות בביטחון

ניהול לקוי דרישות. טקסט זו לא רק פרקטיקה גרועה; זוהי סיכון אבטחה פעיל. הצמדה רופפת, התקנות לא מאומתות ואמון עיוור ברישומים פתוחים הם האופן שבו תוקפים מנצלים את ה- CI/CD pipelineאלו אינם פגמים תיאורטיים; הם מנוצלים מדי יום.

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

אם אתה משתמש דרישות התקנת pip.txt באופן מקומי או ב-CI, תמיד ודאו וניטרו מה מוכנס לתוך ה-builds שלכם. כלים כמו קסיגני לספק נראות, אכיפת מדיניות ובדיקות אוטומטיות שנועלות את שרשרת האספקה ​​של Python שלך מפני דרישות להקפאת pips.txt לכל אורך תהליך הייצור.

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

אבטחו את פיתוח ואספקת התוכנה שלכם

עם חבילת המוצרים Xygeni