وقتی برای ابزار مانیتورینگ یا عیبیابی شبکه، آدرس کاربر را به فرمان سیستم میدهی، ساختن رشتهٔ فرمان و اجرای آن با
shell=True میتواند به Command Injection منجر شود؛ یعنی ورودی کاربر بهجای داده، بخشی از فرمان شود.🛡 راه امنتر: آرگومانها را بهصورت لیست بده و ورودی را متناسب با کاربرد اعتبارسنجی کن. این نمونه در لینوکس فقط یک آدرس IP معتبر میپذیرد:
import ipaddress
import subprocess
user_input = "127.0.0.1"
ip = str(ipaddress.ip_address(user_input))
result = subprocess.run(
["ping", "-c", "1", ip],
shell=False,
capture_output=True,
text=True,
timeout=5,
)
print(result.returncode)
⚠️ حذف shell بهتنهایی کافی نیست؛ بعضی برنامهها ورودیِ شروعشده با خط تیره را گزینهٔ اجرایی میدانند. اینجا اعتبارسنجی IP جلوی آن را هم میگیرد. ورودی نامعتبر باعث
ValueError و عبور از مهلت باعث TimeoutExpired میشود؛ در سرویس واقعی هر دو را مدیریت کن.💡 همین الگو را در ابزارهای عیبیابیات امتحان کن؛ اگر سرویس عمومی است، مقصدهای مجاز را هم محدود کن تا ابزار به مسیر دسترسی به شبکهٔ داخلی تبدیل نشود.
📚 ملاحظات امنیتی در مستندات رسمی پایتون
🔖 #Security #امنیت #Python #Command_Injection #subprocess #Network_Security
👤 Developix
💎 Channel: @DevelopixNetwork