Python BackendHub – Telegram
Python BackendHub
7.51K subscribers
314 photos
46 videos
11 files
432 links
Learning python & Backend Engineering, with Mani!

Youtube: https://www.youtube.com/@GitOverHere
Github: https://github.com/ManiMozaffar
Linkedin: https://www.linkedin.com/in/manimozaffar

تبلیغات نداریم

Admin: @Mani_nikou
Download Telegram
سلام مجدد مانی هستم, در کناره دوره تست نویسی تصمیم گرفتم ریکورد دوره Design Pattern هارو هم شروع کنم. در دوره شیرجه عمیق در دیزاین پترن ها, قراره ۵۱ قسمت راجب دیزاین پترن صحبت کنیم و کد بزنیم و دیزاین پترن هارو باهم تمرین کنیم و درکشون کنیم🤝

در اولین ویدیو از پلی لیست پرداختم به معنی لغوی دیزاین پترن, تاریخچه دیزاین پترن رو توضیح دادم و گفتم چرا بهتره دیزاین پترن هارو یاد بگیرین, و در آخر قراره مباحث و پترن هایی که قراره تو دوره کاور شن رو نمایش دادم. اگه سوالی یا فیدبک یا پیشنهادی داشتین حتما کامنت کنید زیر ویدیو

https://www.youtube.com/watch?v=8IyWT2TU45M&list=PLEQ3RnweNGA5XLLANrPl5erS90EREs0F0&index=2

تشکر از عرفان بابت ساخت کاور دوره 🙌
@ManiFoldsPython
32👍8🔥3🍌2
Python BackendHub
سلام مجدد مانی هستم, در کناره دوره تست نویسی تصمیم گرفتم ریکورد دوره Design Pattern هارو هم شروع کنم. در دوره شیرجه عمیق در دیزاین پترن ها, قراره ۵۱ قسمت راجب دیزاین پترن صحبت کنیم و کد بزنیم و دیزاین پترن هارو باهم تمرین کنیم و درکشون کنیم🤝 در اولین ویدیو…
Unpopular opinion: You don't need classes to write a good code!

کلا چیزی که درک نمیکنم اینه که چرا اکثرا دیزاین پترن رو با شی گرایی اشتباه میگیرین, درسته مباحثی که مثلا تو کتاب GoF گفته شده شی گراییه ولی دلیل نمیشه این دوتا دقیقا عینه هم باشن. من تو این دوره به دیزاین پترن هایی میپردازم که تو فانکشنال پروگریمنگ مثل haskell استفاده میشه. هدف دیزاین پترن اینه که شما مغزتون باز شه و بتونید از یک سری سولوشن reusable به جای درست استفاده کنید. پس اگه فقط ملاکتون رو بذارین رو OOP نتیجش و کورکورانه دنبال کردن نتیجش این میشه که فانکشنی نمینویسید و کدتون تبدیل به یک کد OOP به شدت پیچیده میشه.

مثال میخواین؟
https://github.com/ManiMozaffar/fast-student/tree/main/fast_acl/acl
کل ACL ای که من تو اون دوره تعریف کردم از یک کلس هم استفاده نکردم توش! (به جز enum) و بنظرم به شخصه خیلی کد maintainable ای بود. توش از استراتژی پترن و ریپازیتوری پترن و Postel's law استفاده کردم.

کتابایی که مطالبو ازشون میگیرم:
design patterns: elements of reusable object-oriented software
dive into design patterns (refactoring guru)
https://www.youtube.com/watch?v=srQt1NAHYC0
https://www.youtube.com/watch?v=E8I19uA-wGY

@ManifoldsPython
👍14👎2
https://youtube.com/playlist?list=PLpPXw4zFa0uKKhaSz87IowJnOTzh9tiBk&si=-qw3jGBt84KXhkbS

یک پلی لیست خیلی عالی در مبحث ساختمان داده

@ManiFoldsPython
8
وقتی دارین JWT رو خودتون مینویسید چند تا سوال از خودتون بکنید

۱. آیا توکن سمت مرورگر یا کلا کلاینت جایی غیر از کوکی ذخیره میشه؟ یا کلا جای نا امن(مثل لوکال استوریج)
۲. آیا اتک CSRF ممکنه بخورم؟
۳. آیا یک رفرش توکن میتونه چند بار استفاده شه؟
۴. آیا کاربر نمیتونه لاگ اوت کنه؟
۵. آیا وقتی کاربر رمزشو ریست میکنه بقیه رفرش توکن هایی که با رمز قبلی بودن اکسپایر نمیشن؟
۶. ایا اصل و benefit خوده JWT رو نقض کردم؟ (مثلا با هر درخواست هیت میزنم به دیتابیس؟ و sateful هست؟)
۷. آیا دیتایی که تو رفرش توکن یا اکسز توکن هست رو یک نفر دیگه به جز کاربر ببینه میتونه باهاش دسترسی خاصی بگیره؟‌(فرضا توکن اسکپایر شده خوده دیتا رو میگم)
۸. ایا SECRET KEY من ثابته و roate نمیشه؟
۹. آیا برای منیج Env variable هام دارم از .env استفاده میکنم؟
۱۰. آیا طول عمر اکسز توکنم زیاده؟

اگه جواب یکی از این سوالا آره باشه, یعنی سیستم احراز هویتتون vulnerability داره. اگه جواب سوال ۶ آره باشه یعنی ماهیت JWT رو درک نکردین.من معمولا یک extension دارم رو مرورگرم که کوکی و لوکال استریج و سشن استوریج رو نشون میده و این مورد رو تو سایتای ایرانی بررسی کنید متاسفانه حتی سایت های خیلی معروفم اینا رو رعایت نمیکنن و همین باعث میشه که این فاجعه ها پیش بیاد در حالی که تو سایتای خارجی اکثرا میبینم این موارد رعایت شده.

دقت کنید رعایت این موارد حتی از آسیب پذیری های سمت کلاینت هم جلوگیری میکنه. آسیب پذیری سمت کلاینت تا حد خیلی زیادی بازم به عهده شماست, نباید طوری باشه که طرف بتونه با یک دسترسی سطح پایین به کلاینت همه چیشو دربیاره از سایتتون.

@ManiFoldsPython
🔥21👍4👾3👏2
Joke: we don't need frontend framework to build a HTML table dynamically😎

@ManiFoldsPython
🗿2
کیفیت یک دیزاین خوب:

High Reusability
High Readability
High Testability
High Flexibility

اینو درنظر داشته باشین برای ادامه دوره دیزاین پترن. تمام هدف ما همینه که کدمون تو چهارچوب این چهار مورد باشه.

@ManiFoldsPython
👌22🤡4🤮2😁1
در ادامه دوره دیزاین پترن ها, دو ویدیو منتشر کردم/ جمع بندی از OOP کردیم که در ادامه دوره با کلمه هایی که استفاده میشه آشنایی کامل داشته باشین
تو این ویدیو پرداختم به مفاهیم ارث بری و hierarchies و مثال زدم و کاربردشون رو توضیح دادم

https://www.youtube.com/watch?v=2N-d_s1Lvqc&list=PLEQ3RnweNGA5XLLANrPl5erS90EREs0F0&index=2

تو ویدیو بعدی پرداختم به Abstraction و Encapsulation و Polymorphism و مجددا مثال زدم که کدمون بدون رعایت این موارد چطور میشد و بعد از رعایتشون چطور شد و کاربردشون کجاست؟

https://www.youtube.com/watch?v=jvXn8VcJPNY&list=PLEQ3RnweNGA5XLLANrPl5erS90EREs0F0&index=3

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

@ManiFoldsPython
👍43👏1
این مدت پیام‌های زیادی رو میگرفتم که بچه‌ها میپرسیدن در ایران که دسترسی به AWS نداریم، چطور AWS رو یاد بگیریم؟

توی این ویدیو ۱۰ روش مختلف رو توضیح دادم که برای یادگیری AWS در ایران میتونید استفاده کنید و خودم هم زمانی که در ایران بودم از همین روش‌ها استفاده کردم برای یادگیری AWS و سرویس دهنده‌های کلاد، امیدوارم کمک کننده باشه.

🖥 مشاهده در یوتوب
👉 Link: https://youtu.be/WXwZ33Ntss8?si=9EeCKzjaaWV0vx2y

#AWS #Cloud
〰️〰️〰️〰️〰️〰️
@BobyDotCloud
🔥86👍1
🤣25😁9👍5
Python BackendHub
😂😂 @ManiFoldsPython
تو گروه یک سوال خیلی خوب پرسیدن:
ایا امکان داره که از سمت بکند ی محدودیتی ایجاد کنیم و بگیم فقط از جایی که مشخص شده ریکوئست ها جواب داده بشه؟ مثلا من ی بکند دارم و ی فرانت اند و بگم فقطذاز سمت فرانتم بشه ریکوئست فرستاد و کسی نتونه دستی ریکوئست بزنه

چند تا جواب تو گروه دادن که خیلی کامل نبود. کتاب HTTP: The Definitive Guide رو توصیه میکنم بخونید. به عنوان یک بک اند دولوپر حتما و حتما باید درک کنیم http رو چون خیلی سرو کار داریم باهاش
ما یک چیزی داریم بهش میگن request spoofing. یعنی من یک هدر ست کنم و خودمو جای چیزی بزنم که نیستم.مثلا یوزر ایجنت ست کنم. به این کار میگن اسپوف کردن.

دسته اول
Forbidden header name
داخل مرورگر
https://developer.mozilla.org/en-US/docs/Glossary/Forbidden_header_name
اینا رو میشه از کلاینت فیک کرد؟‌اره میشه. اینا تا زمانی قابل اعتمادن که شما فرض میگیری کلاینتت همیشه مرورگره. بیشتر از این نباید به این هدرا اعتماد کنی. اینا به راحتی قابل اسپوفن.

دسته دوم
یک سری هدر وجود داره که توسط لود بالانسرست میشه. به شرطی میتونی اعتماد کنی به این هدر ها که ۱۰۰درصد میدونی راه ارتباطی به جز لود بالانسر با اپلیکیشنت نیست.
X-Forwarded-For
مثل این

دسته سوم:
دیتا هایی که تو IP packet هست و بازم قابل دسترسیه. تو سطح شبکه هستن اینا. مثلا من میگم ای پی ادرس من ۱.۱.۱.۱ هست. میشه اسپوفش کنم؟‌اره میشه. ولی اگه بکنم اونوقت tcp یک طرفه میشه. چرا؟‌چون من درخواست میزنم google.com رو ببینم اونوقت google سعی میکنه دیتاشو بفرسته برای ۱.۱.۱.۱. و چون جوابی نمیده بهش سریع بسته میشه کانکشنش. که البته این خیلی ساده بود تو سناریو واقعی واقعا نمیتونید همچین کاری کنید

اما در اخر جواب دوستمون, شما قطعا نمیتونید کاری کنید که هیچ کلاینتی به جز فرانت به شما دیتا نفرسته. درسته cors و ... وجود داره ولی همه اونا برای مرورگره. در نهایت من میتونم بدون اینکه از فرانتتون استفاده کنم درخواست بفرستم.
چطوری جلوشو میگیرن؟ میان تشخیص میدن کلاینت هایی که از مرورگر نیستن و تو مرورگر هم از cors استفاده میکنن. راه های تشخیصش چیه؟
۱. کپچا (آسون و یکم قابل اعتماد)
۲. دیتکت user agent (آسون و غیر قابل اعتماد)
۳. فینگرپرینت مرورگر (پیچیده و خیلی قابل اعتماد)
راه سوم توسط شرکت های enterprise انتخاب میشه.
@ManiFoldsPython
👍12
Python BackendHub
تو گروه یک سوال خیلی خوب پرسیدن: ایا امکان داره که از سمت بکند ی محدودیتی ایجاد کنیم و بگیم فقط از جایی که مشخص شده ریکوئست ها جواب داده بشه؟ مثلا من ی بکند دارم و ی فرانت اند و بگم فقطذاز سمت فرانتم بشه ریکوئست فرستاد و کسی نتونه دستی ریکوئست بزنه چند تا…
راجب fingerprint

اینطوری کار میکنه که یک سری جاوا اسکریپت رو مرورگر شما ران میشه
و از api های مختلف مرورگرتون استفاده میکنه
و اطلاعات سیستمتون رو بیرون میکشه
و حتی شامل gpu هم میشه مثل canvas و webgl

اگه خوب پیاده سازی شده باشه تقریبا قابل اسپوف نیست, میتویند تست کنید خودتون. یعنی اسپوف کنید سرور میفهمه دروغ گفتین.

نمونش اینجاست.
https://abrahamjuliot.github.io/creepjs/

سایتا خیلی به Fingerprint id اعتماد نمیکنن چون خیلی راحت تغییر میکنه (مثلا اگه یک فونت اضافه کنید به سیستم عاملتون تغییر میکنه). معمولا به ترکیبی از FP ID و webgl و canvas اعتماد میکنن که gpu هم دخیل باشه! خیلی از صفحات امنیتی نت رو همین مکانیزم کار میکنند.

پی نوشت: اینارو تو اون کتاب نگفته ها 😂 اینا یافته های خودم بوده. مدت زیادی رو این چیزا کار میکردم چون قبلا خیلی زیاد کراول میکردم.

@ManiFoldsPython
👍12
حالا یک سوال ازتون میپرسم
بنظرتون host تو هدر ارسال میشه قابل override هست توسط کلاینت؟
و اگه قابل اوراید باشه چه اتفاقاتی میفته بنظرتون؟ و کی داره این host رو ست میکنه؟


@ManiFoldsPython
👍4