چگونه می توان عملکرد Urlopen را در پایتون سخت و سخت کرد

عکس پروفایل Jonathan Bowman Hacker Noon

@Bowmanjdجاناتان بومن

یادگیری مداوم توسعه نرم افزار ، پایتون ، لینوکس ، کانتینرها و کمی زنگ. فکر می کند regex سرگرم کننده است.

پایتون دارای یک سرویس گیرنده HTTP سطح بالا مفید در کتابخانه استاندارد است:

urllib.request.urlopen()

. در حالی که کتابخانه های HTTP مانند درخواست ها و HTTPX عالی هستند ،

urlopen

کارها را بدون وابستگی های خارجی انجام می دهد.

با این حال ، یک نگرانی امنیتی قابل توجه وجود دارد

urlopen

: url می تواند انواع مختلفی از پروتکل ها را باز کند ، حتی اجازه دسترسی به سیستم فایل محلی را نیز می دهد

file:///

URL ها البته ، ما همیشه باید ورودی کاربر را سالم کنیم ، اما اگر بتوانیم پیکربندی کنیم چه می کنیم

urlopen 

فقط بارگذاری کنید ، مثلاً

https

آدرس اینترنتی؟

کلاس OpenerDirector داخلی چنین فرصتی را برای ساده سازی فراهم می کند

urlopen

، آن را ایمن تر کرده و مدیریت خطاهای سفارشی را ارائه دهید.

مشکلات امنیتی به طور پیش فرض

urlopen

موارد زیر را می توانید روی سیستم لینوکس امتحان کنید:

from urllib.request import urlopen

url = "file:///etc/passwd"

with urlopen(url) as response:
  print(response.read().decode())

کمی ناراحت کننده است ، بله؟ راهزن موافق است. (شاید بخواهید اسکن با Bandit یا پلاگین flake8 مربوط به آن را در نظر بگیرید.)

کد فوق مطمئناً درس “پاک کردن ورودی های کاربر شما” را بیان می کند. البته ، اگر آن رشته “url” را کنترل کنید ، یا می توانید اطمینان حاصل کنید که با “https: //” صحیح شروع می شود …