إدخال المستخدم في بايثون - إدخال المستخدم في بايثون - كيفية الحصول على إدخال المستخدم في بايثون

الطريقة الخاطئة للحصول على مدخلات المستخدم في بايثون (والبديل الآمن)

متى مدخل() يذهب خطأ

طلب نص برمجي لنشر بايثون أمرًا من وحدة التحكم. أدى إدخال خاطئ إلى تشغيل عملية خاطئة وتعطيل بناء الإنتاج. هذا هو خطر إدخالات مستخدم بايثون: سلسلة نصية واحدة غير مُتحقق منها قد تُسبب حقنًا، أو فقدان بيانات، أو تجاوزًا منطقيًا. دعونا نشرح سبب حدوث ذلك وكيفية التعامل مع إدخالات مستخدم بايثون بأمان في المشاريع مفتوحة المصدر والمشاريع الداخلية.

المشكلة مع إدخال المستخدم () Python

استخدم مدخل() دالة بايثون بسيطة: تقرأ النص من وحدة التحكم وتعيده كسلسلة نصية. لا حاجة للتحقق. لا فحص. يبدو هذا الأمر غير ضار في حد ذاته. لكن في نصوص الإنتاج، CI/CD في ظل التطور التكنولوجي السريع، وفي ظل وجود العديد من الوظائف وأدوات الأتمتة، فإن تمرير مدخلات المستخدم الخام في Python مباشرة إلى الأوامر أو الوظائف يفتح الباب أمام الثغرات الأمنية.

				
					python
user_command = input("Enter command: ")
simulate_system_call(user_command)  # Simulated function for demonstration

				
			

⚠️ مثال تعليمي فقط، غير عملي أو قابل للاستغلال

إذا كنت تتساءل عن كيفية الحصول على إدخال المستخدم في Python بأمان، فإن الإجابة بسيطة: لا تثق به أبدًا بشكل أعمى.

المخاطر والمعالجة الآمنة في DevSecOps Pipelines

يمكن أن تتسلل مدخلات المستخدم غير الآمنة في Python إلى أماكن مختلفة مراحل دورة حياة البرمجيات:

  • CI/CD مخطوطات التي تنشر أو تبني القطع الأثرية
  • أدوات المطور الداخلية البيئات المسيطرة
  • تكامل الطرف الثالث التي تفترض أن المدخلات آمنة.

إذا عالجت إحدى التبعيات مدخلات المستخدم في بايثون دون التحقق من صحتها، فسترث هذا الخطر، حتى لو كان كودك آمنًا. لهذا السبب، يجب تطبيق التحقق من الصحة باستمرار على جميع الأنظمة. pipeline.

مثال pipeline مخاطرة:

				
					python
# ⚠️ Educational example only — not functional
env_target = input("Enter deployment environment: ")
simulate_deploy(env_target)  # Simulated for demonstration


				
			

الصيانة الوقائية CI/CD التنفيذ:

				
					yaml
stages:
  - validate
validate_input:
  script:
    - python scripts/check_input_safety.py
  rules:
    - if: '$CI_COMMIT_BRANCH == "main"'
      when: never


				
			

مفتاح الوجبات الجاهزة: إن معرفة كيفية الحصول على مدخلات المستخدم في Python بشكل آمن لا يمثل سوى نصف المهمة؛ حيث يضمن التنفيذ التلقائي الكود غير الآمن لا يصل إلى الإنتاج أبدًا.

متجهات الهجوم الشائعة

قد تؤدي إدخالات مستخدم بايثون غير الآمنة إلى أكثر من مجرد "بيانات خاطئة". تشمل المخاطر الشائعة ما يلي:

  • حقن الأوامر، تمرير البيانات التي يتحكم بها المستخدم إلى أوامر النظام
  • حقن الرمز: تنفيذ الكود المولد ديناميكيًا من الإدخال

التجاوز المنطقي، تخطي المصادقة أو تغيير التدفق من خلال الإدخال المصمم.

				
					python
# ⚠️ Educational example only — not functional or exploitable
code_snippet = input("Provide code: ")
simulate_code_execution(code_snippet)  # Simulated evaluation for demonstration

				
			

إذا اعتمدت على إدخال المستخدم الخام في Python، فأنت بذلك تقوم بتسليم التحكم للمستخدم أو المهاجم.

البديل الآمن: التحقق من صحة المدخلات وتطهيرها

الهدف ليس الإزالة مدخل() من جميع التعليمات البرمجية، الهدف هو التأكد من التحقق من صحة إدخال مستخدم بايثون قبل أن يلمس العمليات الحرجة.

الطريقة الأكثر أمانًا للحصول على مدخلات المستخدم في Python هي:

  • فرض عمليات فحص النوع
  • تطبيق القوائم البيضاء للقيم المسموح بها
  • استخدم مكتبات التحليل الآمنة مثل الجدل و مائي.

مقارنة سريعة

سيناريومثال غير آمنمثال آمن
الاستخدام المباشر ل input()

# ⚠️ Educational example only
user_name = input("Enter username: ")
simulate_process(user_name)
        

import argparse
parser = argparse.ArgumentParser()
parser.add_argument("--username", type=str)
args = parser.parse_args()
process(args.username)
        
التحقق المنظم

# ⚠️ Educational example only
age = input("Enter your age: ")
        

from pydantic import BaseModel, ValidationError
class UserInput(BaseModel):
    age: int
try:
    data = UserInput(age=int(input("Enter your age: ")))
except ValidationError as e:
    print("Invalid input:", e)
        

أفضل الممارسات لإدخال المستخدم في بايثون:

  • تحويل الأنواع ومعالجة الأخطاء (حاول/باستثناء)
  • تطبيق القوائم البيضاء للقيم المعروفة
  • استعمل الجدل لـ CLI و مائي للبيانات المنظمة

اكتشاف الإدخالات غير الآمنة وتنفيذها CI/CD مع زيجيني

المراجعة اليدوية لا تكفي لالتقاط جميع مدخلات مستخدمي Python غير الآمنة؛ فالأتمتة هي المفتاح. أدوات مثل زيجيني مسح مستودعات البيانات بحثًا عن أنماط إدخال المستخدم في بايثون دون الحاجة إلى تعقيم. عند دمجها في CI/CDيفشلون في مهمة الأمان إذا تم اكتشاف معالجة إدخال غير آمنة. هذا يمنع الدمج مع الفروع المحمية حتى يتم إصلاح المشكلة.

سيناريومثال غير آمنمثال آمن
الاستخدام المباشر ل input()

# ⚠️ Educational example only — not functional
name = input("Enter username: ")
simulate_process(name)  # Simulated for demonstration
        

import argparse
parser = argparse.ArgumentParser()
parser.add_argument("--username", type=str)
args = parser.parse_args()
process(args.username)  # Validated by argparse
        
التحقق المنظم

# ⚠️ Educational example only — not functional
age = input("Enter your age: ")
        

from pydantic import BaseModel, ValidationError

class UserInput(BaseModel):
    age: int

try:
    data = UserInput(age=int(input("Enter your age: ")))
except ValidationError as e:
    print("Invalid input:", e)
        
CI/CD تطبيق

# Missing automated checks allows
# unsafe input patterns to slip in
# during reviews/merges.
        

jobs:
  security_scan:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - name: Run Xygeni Scan
        run: xygeni scan \
          --rules detect-unsafe-input \
          --fail-on-findings
        

كيف يعمل:

  1. يقوم Xygeni بالبحث عن مدخلات المستخدم غير الآمنة في Python.
  2. إذا تم العثور عليه، فإنه يعيد رمز خروج غير صفري.
  3. CI/CD يعتبر المهمة فاشلة.
  4. تمنع حماية الفرع عملية الدمج حتى يتم إصلاح المشكلة.

يفرض هذا كيفية الحصول على إدخال المستخدم في Python بشكل آمن وتلقائي.

الوجبات الجاهزة النهائية

لا تثق أبدًا بمدخلات مستخدم بايثون دون التحقق من صحتها. مدخل() يمكن أن يؤدي ذلك إلى حدوث خروقات أو فشل في النشر أو اختراق كامل.

خطة عمل:

  • التحقق من صحة الأمر من البداية:  تطبيق تحويل النوع والقوائم البيضاء والمكتبات مثل الجدل or مائي قبل معالجة إدخال المستخدم Python.
  • أتمتة الكشف:  تكوين pipelines لمنع عمليات الدمج عند العثور على أنماط غير آمنة.
  • تنفيذ بوابات أمنية:  دمج أدوات مثل Xygeni لـ الحجب التلقائي في الفروع المحمية.
  • قم بتثقيف فريقك:  تأكد من أن الجميع يعرف كيفية الحصول على مدخلات المستخدم في Python بشكل آمن ويفهم مخاطر تخطي التحقق من الصحة.

لا يبدأ أمان التطبيق في الإنتاجيبدأ العمل فور كتابة أول سطر من الكود. اجعل معالجة الإدخال الآمنة هي الإعداد الافتراضي.

أدوات تحليل التركيبات البرمجية sca
إعطاء الأولوية للمخاطر التي تتعرض لها برامجك، ومعالجتها، وتأمينها
احصل على حسابك المجاني.
أي بطاقة ائتمان.

احمِ عملية تطوير وتسليم برامجك

مع مجموعة منتجات Xygeni