Media is too big
VIEW IN TELEGRAM
گفتگو با مهندس محمد طاهری
برنامه نویس ارشد فرانت
ایشون سابقه کار برای ایرانسل رو دارن و در حال حاضر در داتین مشغول به کار هستن
سوالاتی که از ایشون پرسیدم:
-دبیرستان بودید یا هنرستان؟ چه رشته ای؟
-چه شرکت هایی کار کردید و چه سمتی داشتید؟
-برای برنامه نویس فرانت شدن چه چیزایی باید بلد باشیم؟
-آیا جاوا اسکریپت رو باید بلد باشیم؟
-آیا باید گرافیک و فتوشاپ و... هم بلد باشیم؟
-میشه بگید ux چیه؟ و آیا اونم کار برنامه نویس فرانته؟
-توی فرانت چه چیزی رو قوی بشیم بهتره؟
-درباره ری اکت و انگولار و... یکم توضیح میدید؟
-کار فرانت سخته یا بکند؟ کدوم پول بیشتری توشه؟
-بوت استرپ خوبه یه تیلویند؟ -اصلا اینارو لازمه یاد بگیریم؟
-آیا جی کوئری دیگه منسوخ شده؟
-فرق یه برنامه نویس خوب و بد چیه؟
-چرا بکند کارها سی اس اس بلد نیستن؟
آیا درسته که کتابخانه های js مثل ری اکت و... توی سئو مشکل دارن؟
-نود جی س برای بکند خوبه؟
--اگر نسخه ۱۸ ساله خودتون رو ملاقات میکردن چه توصیه هایی بهشون میکردن و بهش چیا میگفتن
لینک آپارت:
https://aparat.com/v/xhe50w6
لینک یوتیوب:
https://youtu.be/sHYPov3yRlg
لینک mp3:
https://www.tg-me.com/جنگولرن/com.djangolearn_ir/1001
برنامه نویس ارشد فرانت
ایشون سابقه کار برای ایرانسل رو دارن و در حال حاضر در داتین مشغول به کار هستن
سوالاتی که از ایشون پرسیدم:
-دبیرستان بودید یا هنرستان؟ چه رشته ای؟
-چه شرکت هایی کار کردید و چه سمتی داشتید؟
-برای برنامه نویس فرانت شدن چه چیزایی باید بلد باشیم؟
-آیا جاوا اسکریپت رو باید بلد باشیم؟
-آیا باید گرافیک و فتوشاپ و... هم بلد باشیم؟
-میشه بگید ux چیه؟ و آیا اونم کار برنامه نویس فرانته؟
-توی فرانت چه چیزی رو قوی بشیم بهتره؟
-درباره ری اکت و انگولار و... یکم توضیح میدید؟
-کار فرانت سخته یا بکند؟ کدوم پول بیشتری توشه؟
-بوت استرپ خوبه یه تیلویند؟ -اصلا اینارو لازمه یاد بگیریم؟
-آیا جی کوئری دیگه منسوخ شده؟
-فرق یه برنامه نویس خوب و بد چیه؟
-چرا بکند کارها سی اس اس بلد نیستن؟
آیا درسته که کتابخانه های js مثل ری اکت و... توی سئو مشکل دارن؟
-نود جی س برای بکند خوبه؟
--اگر نسخه ۱۸ ساله خودتون رو ملاقات میکردن چه توصیه هایی بهشون میکردن و بهش چیا میگفتن
لینک آپارت:
https://aparat.com/v/xhe50w6
لینک یوتیوب:
https://youtu.be/sHYPov3yRlg
لینک mp3:
https://www.tg-me.com/جنگولرن/com.djangolearn_ir/1001
Forwarded from ITShield
Media is too big
VIEW IN TELEGRAM
مواظب باشین وگرنه این بلا سر شما هم خواهد آمد یا قبلا اومده و خبر ندارین
نخواستم از همه قابلیت ها استفاده کنم تا باعث وحشت یا ... نشه و فقط اطلاع رسانی بشه
نخواستم از همه قابلیت ها استفاده کنم تا باعث وحشت یا ... نشه و فقط اطلاع رسانی بشه
Forwarded from ITShield
نصیحتی برادرانه از یک علاقه مند به امنیت به عموممردم :
اگر مجهز به دانش سایبری نیستین انجام کارهای زیر در تلگرام برای شما حیاتی هست و در صورت انجام ندادن دارین با جون خودتون بازی میکنین
۱- برای اکانت تلگرامتون نامکاربری نزارین
۲- هر از چند گاهی اکانتتون رو حذف کنین و دوباره اکانت تلگرامبسازین تا آیدی شما تغییر کنه
۳- به کسی که نمیشناسین پیام ندین و جواب پیامش رو هم ندین
۴- توی هر گروه و کانالی پیام نزارین مگر پیام ضروری حتی گروه ها یا کانالهای خصوصی یه نفره خودتون با خودتون
۵- از نشر اطلاعات خصوصی در تلگرام و یا آرشیو کردن بپرهیزین
دلیلش رو شاید هیچ وقت نتونم بهتون توضیح بدم تا زمانی که قصه پابلیک بشه
اما سربسته از من بپذیرین که تلگرام برای اطلاعات و ... شما جای امنی نیست
از تجربه این برادر کوچک طلبه خودتون استفاده کنین قبل از اینکه گذر زمان براتون تجربه درست کنه(و مورد استفاده یا سوءاستفاده قرار بگیرین)
هکرها فقط نامکاربری یا یک پیام از شما لازم دارن تا .....
این هیچ ربطی به مهندسی اجتماعی و گوشی شما و سازمانهای خاص و رمز دو مرحله ای و ..... نداره
خانه از پای بست ویران است
اطلاع رسانی عمومی
اگر مجهز به دانش سایبری نیستین انجام کارهای زیر در تلگرام برای شما حیاتی هست و در صورت انجام ندادن دارین با جون خودتون بازی میکنین
۱- برای اکانت تلگرامتون نامکاربری نزارین
۲- هر از چند گاهی اکانتتون رو حذف کنین و دوباره اکانت تلگرامبسازین تا آیدی شما تغییر کنه
۳- به کسی که نمیشناسین پیام ندین و جواب پیامش رو هم ندین
۴- توی هر گروه و کانالی پیام نزارین مگر پیام ضروری حتی گروه ها یا کانالهای خصوصی یه نفره خودتون با خودتون
۵- از نشر اطلاعات خصوصی در تلگرام و یا آرشیو کردن بپرهیزین
دلیلش رو شاید هیچ وقت نتونم بهتون توضیح بدم تا زمانی که قصه پابلیک بشه
اما سربسته از من بپذیرین که تلگرام برای اطلاعات و ... شما جای امنی نیست
از تجربه این برادر کوچک طلبه خودتون استفاده کنین قبل از اینکه گذر زمان براتون تجربه درست کنه(و مورد استفاده یا سوءاستفاده قرار بگیرین)
هکرها فقط نامکاربری یا یک پیام از شما لازم دارن تا .....
این هیچ ربطی به مهندسی اجتماعی و گوشی شما و سازمانهای خاص و رمز دو مرحله ای و ..... نداره
خانه از پای بست ویران است
اطلاع رسانی عمومی
Forwarded from Python BackendHub
یکی از مشکلاتی که اکثر برنامه نویسا دارن تو مدیریت دپندسیه! حالا لایبری جدید یا external service که قراره ازش استفاده کنن.
مشکل چیه؟برنامه نویس میاد یک توتوریال از اون دپندسی جدید میبینه با خودش میگه ایول چه باحاله و تصمیم میگیره اضافش کنه! و این بد ترین کاریه که میتونید بکنید. قراره وابسته بشین به چیزی. فکر کنید این وابستگی از جنس عاطفیه. همینقدر باید باهاش حساس برخورد کنید :))
خب چیکار کنیم؟
اولین کاری که میکنید اینه که توتوریالشو میریزین دور. میرین داکیومنتشو خوب میخونید. متوجه میشین limitation هاش چیه. متوجه میشین سیستمش چطور کار میکنه. یک داکیومنت مختصر شده ازش میسازین و cons pro هاشو در میارین. مثلا یعنی چی؟
فکر کنید مثلا دارین یک external system اضافه میکنید. مثلا یک CRM. خب اول باید چک کنید چه limitation هایی داره؟ایا api داره؟ایا web hook داره؟ ایا share state به وجود میاد؟ هزینش چقدره؟ alternative هاش چیه؟ چطور اصلا کار میکنه؟ اصلا خوب کار میکنه؟!
بعد تو درجه دوم میرین گوگل میکنید و مقاله هایی پیدا میکنید که نقاط ضعفشو بیشتر گفته. ممکنه همه نقاط ضعفش تو داکیومنتش نباشه و یکم پنهان باشه. میبینید بقیه چه چالش هایی داشتن موقع کار کردن باهاش.
در نهایت بین آپشن ها یک لیست pro cons میسازین و تصمیم گیری نهایی رو میکنید.
اگه این کارو نکنیم چه اتفاقی میفته؟
بذارین مثال بگم. مثلا شما ندیدین این api limit احمقانه ای داره. بعد کلی روش کد میزنید. یک روزی سایز بیزنستون بزرگ تر میشه و حالا هرچی کد رو زدین باید undo کنید.
همیشه تو انتخاب دپندسی هاتون خیلی فکر کنید! من بعضا دیدم بچه ها میگن <کارفرما اینطوری گفته> یا <مدیر تیم با این بیشتر حال کرده>. اینا دلایل منطقی اصلا نیستن برای انتخاب یک دپندسی.
@ManiFoldsPython
مشکل چیه؟برنامه نویس میاد یک توتوریال از اون دپندسی جدید میبینه با خودش میگه ایول چه باحاله و تصمیم میگیره اضافش کنه! و این بد ترین کاریه که میتونید بکنید. قراره وابسته بشین به چیزی. فکر کنید این وابستگی از جنس عاطفیه. همینقدر باید باهاش حساس برخورد کنید :))
خب چیکار کنیم؟
اولین کاری که میکنید اینه که توتوریالشو میریزین دور. میرین داکیومنتشو خوب میخونید. متوجه میشین limitation هاش چیه. متوجه میشین سیستمش چطور کار میکنه. یک داکیومنت مختصر شده ازش میسازین و cons pro هاشو در میارین. مثلا یعنی چی؟
فکر کنید مثلا دارین یک external system اضافه میکنید. مثلا یک CRM. خب اول باید چک کنید چه limitation هایی داره؟ایا api داره؟ایا web hook داره؟ ایا share state به وجود میاد؟ هزینش چقدره؟ alternative هاش چیه؟ چطور اصلا کار میکنه؟ اصلا خوب کار میکنه؟!
بعد تو درجه دوم میرین گوگل میکنید و مقاله هایی پیدا میکنید که نقاط ضعفشو بیشتر گفته. ممکنه همه نقاط ضعفش تو داکیومنتش نباشه و یکم پنهان باشه. میبینید بقیه چه چالش هایی داشتن موقع کار کردن باهاش.
در نهایت بین آپشن ها یک لیست pro cons میسازین و تصمیم گیری نهایی رو میکنید.
اگه این کارو نکنیم چه اتفاقی میفته؟
بذارین مثال بگم. مثلا شما ندیدین این api limit احمقانه ای داره. بعد کلی روش کد میزنید. یک روزی سایز بیزنستون بزرگ تر میشه و حالا هرچی کد رو زدین باید undo کنید.
همیشه تو انتخاب دپندسی هاتون خیلی فکر کنید! من بعضا دیدم بچه ها میگن <کارفرما اینطوری گفته> یا <مدیر تیم با این بیشتر حال کرده>. اینا دلایل منطقی اصلا نیستن برای انتخاب یک دپندسی.
@ManiFoldsPython
sarabi.pdf
626.4 KB
✅بهینهسازی کوئریها و مشکل N+1
از لینکدین Mohsen Sarabi
یکی از مشکلات رایج در کوئریها، N+1 Query Problem است. این مشکل زمانی رخ میدهد که ابتدا یک کوئری برای دریافت لیست اصلی دادهها اجرا میشود و سپس برای هر آیتم در این لیست، یک کوئری جداگانه برای دریافت دادههای مرتبط ارسال میشود. نتیجه این قضیه، فرستادن تعداد زیادی درخواست غیرضروری به پایگاه داده است که موجب افزایش زمان پردازش و کاهش عملکرد برنامه ما می شود!
✅ راهحل؟ استفاده از select_related
این متد با استفاده از JOIN در سطح دیتابیس، تمام دادههای مرتبط را در یک کوئری واحد واکشی میکند، که باعث بهینهسازی عملکرد و کاهش تعداد درخواستها میشود.
📌 اگر رابطه ManyToMany باشد، prefetch_related گزینه مناسبی است.
آیا تا به حال با این مشکل برخورد کردهاید؟ چگونه آن را حل کردید؟ خوشحال میشم تجربیاتتون را به اشتراک بذارید.
از لینکدین Mohsen Sarabi
یکی از مشکلات رایج در کوئریها، N+1 Query Problem است. این مشکل زمانی رخ میدهد که ابتدا یک کوئری برای دریافت لیست اصلی دادهها اجرا میشود و سپس برای هر آیتم در این لیست، یک کوئری جداگانه برای دریافت دادههای مرتبط ارسال میشود. نتیجه این قضیه، فرستادن تعداد زیادی درخواست غیرضروری به پایگاه داده است که موجب افزایش زمان پردازش و کاهش عملکرد برنامه ما می شود!
✅ راهحل؟ استفاده از select_related
این متد با استفاده از JOIN در سطح دیتابیس، تمام دادههای مرتبط را در یک کوئری واحد واکشی میکند، که باعث بهینهسازی عملکرد و کاهش تعداد درخواستها میشود.
📌 اگر رابطه ManyToMany باشد، prefetch_related گزینه مناسبی است.
آیا تا به حال با این مشکل برخورد کردهاید؟ چگونه آن را حل کردید؟ خوشحال میشم تجربیاتتون را به اشتراک بذارید.
https://www.cursor.com/en
اینو تست کنید.
حتی شاید ارزشش رو داشته باشه که اکانتش هم بخرید.
کل پروژه رو اوپن کن بهش بده.
علاوه بر کد، فایل هارو هم خودش میسازه و...
اینو تست کنید.
حتی شاید ارزشش رو داشته باشه که اکانتش هم بخرید.
کل پروژه رو اوپن کن بهش بده.
علاوه بر کد، فایل هارو هم خودش میسازه و...
Cursor
Cursor - The AI Code Editor
Built to make you extraordinarily productive, Cursor is the best way to code with AI.
Forwarded from محمد خشنوا / برنامه نویسی (SeYeD Mohammad Khoshnava)
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from TorhamDev | تورهام 😳
یک مبحثی که خیلی وقتها آدمهای رو داخل #جنگو گیج میکنه موضوع Aggregation هستش. برای مثال کوئری پایین:
خب این کوئری مشخصه چه کاری داره انجام میده، همه میتونن بفهمنش مخصوصا وقتی خروجی کوئری رو میبینن، اما اگر ازشون بپرسید خب Aggregation چی هستش هیچ ایده ای ندارن! و این ماجرا از ضعف در دانش SQL سر چشمه میگیره. چون خیلی از آدمهایی که دارن #django کار میکنن مستقیم سراغ جنگو اومدن و نرفتن چیزهای دیگه رو مطالعه کنن و یاد بگیرن.
اسم Aggregation داخل ORM جنگو مستقیما از SQL میاد. در SQL یک سری فانکشن وجود داره که بهشون Aggregation functions میگن و کارشون خلاصه سازی اطلاعات:
MIN() - returns the smallest value within the selected column
MAX() - returns the largest value within the selected column
COUNT() - returns the number of rows in a set
SUM() - returns the total sum of a numerical column
AVG() - returns the average value of a numerical column
و خب شما میتونید داخل کوئریهای SQL ازشون استفاده کنید و دیتا خروجی رو خلاصه سازی کنید و یا یک آمار ازش دربیارید. مثلا میانگین قیمت کتابهای تو سال اخیر و ...
یک کوئری مثال برای Aggregation میتونه این باشه:
خب از اونجایی که ORM جنگو در نهایت قرار کار همین SQL نوشتن برای شما انجام بده و کوئری شمارو به SQL تبدیل کنه شما دقیقا همین کوئری میتونید داخل جنگو به این صورت بنویسید:
میتونید لیست فانکشنهای Aggregation خود SQL داخل این لینک ببینید و ساپورت جنگو هم میتونید داخل این لینک ببینید.
در نهایت از دانش SQL غافل نباشید و حتما یادش بیگیرید. هرچی بیشتر SQL بدونید زندگی راحتتری خواهید داشت.
@TorhamDevCH
>>> from django.db.models import Avg, Max, Min
>>> Book.objects.aggregate(Avg("price"), Max("price"), Min("price"))
# {'price__avg': 34.35, 'price__max': Decimal('81.20'), 'price__min': Decimal('12.99')}
خب این کوئری مشخصه چه کاری داره انجام میده، همه میتونن بفهمنش مخصوصا وقتی خروجی کوئری رو میبینن، اما اگر ازشون بپرسید خب Aggregation چی هستش هیچ ایده ای ندارن! و این ماجرا از ضعف در دانش SQL سر چشمه میگیره. چون خیلی از آدمهایی که دارن #django کار میکنن مستقیم سراغ جنگو اومدن و نرفتن چیزهای دیگه رو مطالعه کنن و یاد بگیرن.
اسم Aggregation داخل ORM جنگو مستقیما از SQL میاد. در SQL یک سری فانکشن وجود داره که بهشون Aggregation functions میگن و کارشون خلاصه سازی اطلاعات:
MIN() - returns the smallest value within the selected column
MAX() - returns the largest value within the selected column
COUNT() - returns the number of rows in a set
SUM() - returns the total sum of a numerical column
AVG() - returns the average value of a numerical column
و خب شما میتونید داخل کوئریهای SQL ازشون استفاده کنید و دیتا خروجی رو خلاصه سازی کنید و یا یک آمار ازش دربیارید. مثلا میانگین قیمت کتابهای تو سال اخیر و ...
یک کوئری مثال برای Aggregation میتونه این باشه:
SELECT AVG(Price) as price_avg FROM Books WHERE puddate='2023-01-01';
خب از اونجایی که ORM جنگو در نهایت قرار کار همین SQL نوشتن برای شما انجام بده و کوئری شمارو به SQL تبدیل کنه شما دقیقا همین کوئری میتونید داخل جنگو به این صورت بنویسید:
>>> from django.db.models import Avg
>>> from datetime import datetime
>>> Books.objects.filter(pubdate=datetime(2023, 1, 1)).aggregate(price_avg=Avg("price"))
میتونید لیست فانکشنهای Aggregation خود SQL داخل این لینک ببینید و ساپورت جنگو هم میتونید داخل این لینک ببینید.
در نهایت از دانش SQL غافل نباشید و حتما یادش بیگیرید. هرچی بیشتر SQL بدونید زندگی راحتتری خواهید داشت.
@TorhamDevCH
W3Schools
W3Schools offers free online tutorials, references and exercises in all the major languages of the web. Covering popular subjects like HTML, CSS, JavaScript, Python, SQL, Java, and many, many more.
Forwarded from Django Expert (Majid A.M)
bigdeli_2.pdf
1003.3 KB
✅تست نرم افزار چیه و شامل چیا میشه؟
از لینکدین علی بیگدلی
همگی کم و بیش با واژه تست کردن نرم افزار یا سرویسمون آشنایی داریم و می دونیم از چه ابزار هایی برای چه تست هایی استفاده میشه ولی می خوام یه قدم برگردیم عقب تر و مباحث رو با دسته بندی بهتر نگاه کنیم.
اگر بخوایم کلی دسته بندی کنیم:
- تست عملکرد (Functional Testing)
- تست غیر عملکرد (Non-Functional Testing)
- تست نگهداری و بازرسی (Maintenance Testing)
بر اساس نحوه اجرا اگر دسته بندی بشن:
- تست دستی (Manual Testing)
- تست خودکار (Automation Testing)
و بر اساس تکنیک تست:
- تست جعبه سیاه (Black-box Testing)
- تست جعبه سفید (White-box Testing)
- تست جعبه خاکستری (Gray-box Testing)
موارد بسیار زیادی هستش که نیازمند یادگیری میشن مثل اینکه بهترین روش ها چیه و به اصطلاح best practice ها چی می تونن باشن. اما در کل شما طی یک پروژه نیازمند تست نرم افزار، ساختار و کیفیت اون خواهید بود و حتی بر اساس امنیت و میزان باری که تحمل می کنه و یا اینکه زیر Stress test چه واکنش هایی میده هم باید سرویس رو مورد آزمایش قرار بدید.
و...
از لینکدین علی بیگدلی
همگی کم و بیش با واژه تست کردن نرم افزار یا سرویسمون آشنایی داریم و می دونیم از چه ابزار هایی برای چه تست هایی استفاده میشه ولی می خوام یه قدم برگردیم عقب تر و مباحث رو با دسته بندی بهتر نگاه کنیم.
اگر بخوایم کلی دسته بندی کنیم:
- تست عملکرد (Functional Testing)
- تست غیر عملکرد (Non-Functional Testing)
- تست نگهداری و بازرسی (Maintenance Testing)
بر اساس نحوه اجرا اگر دسته بندی بشن:
- تست دستی (Manual Testing)
- تست خودکار (Automation Testing)
و بر اساس تکنیک تست:
- تست جعبه سیاه (Black-box Testing)
- تست جعبه سفید (White-box Testing)
- تست جعبه خاکستری (Gray-box Testing)
موارد بسیار زیادی هستش که نیازمند یادگیری میشن مثل اینکه بهترین روش ها چیه و به اصطلاح best practice ها چی می تونن باشن. اما در کل شما طی یک پروژه نیازمند تست نرم افزار، ساختار و کیفیت اون خواهید بود و حتی بر اساس امنیت و میزان باری که تحمل می کنه و یا اینکه زیر Stress test چه واکنش هایی میده هم باید سرویس رو مورد آزمایش قرار بدید.
و...
از کانال @siliciumir
درود
شاید این پلتفرم رایگاان به کار عده ای بیاد. برای ادمین پنل جنگو میتونید تم های مختلفی رو جنریت کنید. خیلی از کارا رو سریعتر میشه باهاش انجام داد. دیتابیس و غیره رو هم متصل میکنید.
https://app-generator.dev/tools/django-generator/
درود
شاید این پلتفرم رایگاان به کار عده ای بیاد. برای ادمین پنل جنگو میتونید تم های مختلفی رو جنریت کنید. خیلی از کارا رو سریعتر میشه باهاش انجام داد. دیتابیس و غیره رو هم متصل میکنید.
https://app-generator.dev/tools/django-generator/
app-generator.dev
Django App Generator - Select Design, DataBase, Auth and Tools | App Generator
Generate Django projects and customize the database, APIs, deployment and authentication
Forwarded from Ninja Learn | نینجا لرن
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Python Hints
وقتی صحبت از امنیت میشه خیلی از توسعه دهندههای اینکار رو وظیفه تیم امنیت میدونند؛ که خب درست هم هست ولی تا یک جایی. شما هم بعنوان توسعه دهنده باید یک سری موارد رو بدونید.
مثلا خیلی دیدم؛ تیمهای تست نفوذ فراموش میکنند (دسترسی ندارند) الگوریتم
دمشون گرم؛ تیم توسعه
توی بعضی مواقع هم دانستن بعضی نکات امنیتی برای
خیلی از برنامهنویسها سرویس login امنی دارند که از موارد امنیتی خوبی هم استفاده میکنه
فرض کنید شما
برای همین کسی که با این موارد آشنا هست؛ برای اینکه
البته که من برای این مثال دست روی یک موردی گذاشتم که خیلیها رعایت نمیکنند (شاید نیازی هم ندارند) و خیلیها بلد نیستند (باید دنبال یک جیزی هم میگشتم که خود
یا مثلا توی کار با دیتا قبول نکردن دیتای pickle؛ اینو برگردید بالا من همون اوایل شروع کار کانال گفتم با مثال و حدود ۶ ماه قبل یکی از خوبای دنیای تکنولوژی با همین روش بهش نفوذ شد (
یا توی شرکتهایی که یوزر فایل آپلود میکنه و نیروی انسانی باید فایل رو بررسی کنه؛ خیلی وقتا دیدم فقط پسوند فایل بررسی میشه و ...
حالا چه چیزهایی رو باید بعنوان دولوپر بدونید ؟ OWASP TOP 10 حداقلی ترین مواردی هست که شما بعنوان یک دولوپر باید بشناسید و راهای مقابله باهاش رو هم بلد باشید.
ولی بطور خاص برای
OWASP cheatsheet for DRF
من یک
مثلا خیلی دیدم؛ تیمهای تست نفوذ فراموش میکنند (دسترسی ندارند) الگوریتم
hash
کردن پسورد داخل دیتابیس رو چک کنند؛ اینجا دانش شما بعنوان برنامهنویس پروژه خودش رو نشون میده و یک لایه اطمینان بیشتر برای پروژه خواهد بود.دمشون گرم؛ تیم توسعه
Django
رو میگم چرا که اکثر اتکهای مهم رو تا جایی که امکانش هست جلوگیری میکنند و برای همین هم همیشه میگم بکند رو فارغ از فریمورک یاد بگیرید. با این حال بسیاری دولوپر Django
هست که حتی زحمت بررسی و آپدیت به آخرین پچهای امنیتی رو به خودش نمیده مثلا pip freeze
و version locking
استفاده کرده.توی بعضی مواقع هم دانستن بعضی نکات امنیتی برای
optimization
بهتون کمک میکنه؛ مثلا توی password hash
ممکن هست تحت یک شرایط خاصی اصلا الگوریتمی مثل Argon2
به کار شما نیاد و به دلایلی بهش نیاز نداشته باشید تحت این شرایط میتونید برگردید روی sha256
و از اون استفاده کنید (این یک مثال بود اگر argon2
رو نمیشناسید درموردش بخونید؛ توی لیست PASSWORD_HASHERS
های Django
هم هست ولی خود Django
از PBKDF2
استفاده میکنه پیشفرض)خیلی از برنامهنویسها سرویس login امنی دارند که از موارد امنیتی خوبی هم استفاده میکنه
throttling, brute-force blocker, hashing
و ... اما بعضی موارد باید فراتر ازین بره؛ چیزی که خیلی ندیدم حتی روی بعضی سرویسهای لاگین شرکتهای بزرگ و موارد حساس.فرض کنید شما
login
با ایمیل اعضای شرکت بزنید (ایمیلهای شرکتی اصول خاصی داره و راحت بدست میاد) اگر ایمیل اشتباه باشه response time
شاید زیر 20ms
باشه ولی وقتی ایمیل درست هست بالای 100ms
میشه این یکی از تکنیکهای قدیمی مورد استفاده برای نفوذ به صفحات ادمین بوده و هست. شما وقتی username. email
رو پیدا کنی یک نگرانی کمتر خواهی داشت.برای همین کسی که با این موارد آشنا هست؛ برای اینکه
response time
لاگین درست و غلط رو یکسان کنه وقتی میبینه یوزر وجود نداره بجای اینکه درجا پاسخ رو برای کاربر بفرسته یکبار پسورد رو با یک چیز رندم (طبق validation
نمیتونه توی دیتابیس باشه) حساب میکنه و بعد response
اطلاعات غلط روی لاگین رو بر میگردونه.البته که من برای این مثال دست روی یک موردی گذاشتم که خیلیها رعایت نمیکنند (شاید نیازی هم ندارند) و خیلیها بلد نیستند (باید دنبال یک جیزی هم میگشتم که خود
django
امن نکرده باشه)یا مثلا توی کار با دیتا قبول نکردن دیتای pickle؛ اینو برگردید بالا من همون اوایل شروع کار کانال گفتم با مثال و حدود ۶ ماه قبل یکی از خوبای دنیای تکنولوژی با همین روش بهش نفوذ شد (
hugging face
رو منظورم هست)یا توی شرکتهایی که یوزر فایل آپلود میکنه و نیروی انسانی باید فایل رو بررسی کنه؛ خیلی وقتا دیدم فقط پسوند فایل بررسی میشه و ...
حالا چه چیزهایی رو باید بعنوان دولوپر بدونید ؟ OWASP TOP 10 حداقلی ترین مواردی هست که شما بعنوان یک دولوپر باید بشناسید و راهای مقابله باهاش رو هم بلد باشید.
ولی بطور خاص برای
Django Rest Framework
حداقل این cheathseet
رو باید داشته باشد OWASP cheatsheet for DRF
من یک
cheatsheet
شخصی خودم دارم (شامل مواردی از بخشهای مختلف همین cheatsheet
هم هست) ولی متاسفانه نمیتونم به اشتراک بذارم چون آخرین ورژن رو با داکیومنت شرکت ادغام کردم. اما پیشنهاد میدم لینک بالا رو بخونید و حتما حتما حتما نگاهی هم به رفرنسهاشون بندازید این خیلی مهمه.cheatsheetseries.owasp.org
Django REST Framework - OWASP Cheat Sheet Series
Website with the collection of all the cheat sheets of the project.
استفاده از Django-storage در محیط پروداکشن
از لینکدین Farzin Shams
قطعا در پروژههای Django از فایلهای مدیا استفاده کردید و میدونید برای بهینه بودن پروژه بهتره این فایلهارو روی سروری که پروژه ران شده ذخیره نکنید. دلایل مختلفی برای این کار وجود داره! چون:
🔹 سرور فضای محدودی داره
🔹 سرعت پایینه
🔹 بکآپگیری و امنیت سخته
🔹 مقیاسپذیر نیست
اینجاست که django-storages به کمک ما میاد:
یک پکیج کاربردی که کمک میکنه فایلها رو بهجای ذخیرهسازی محلی، روی فضای ابری آپلود کنیم، مثل:
✅ Amazon S3
✅ Google Cloud
✅ Azure
از اونجایی که اکثر سرویس دهندههای خارجی از ایران قابل استفاده نیستن، شما به راحتی میتونید با استفاده از سرویسهای S3 ایرانی مثل ابر آروان، دادیار، لیارا و ... تجربه بهتری رو برای کاربران سایت خودتون رقم بزنید.
.
💡 با این کار، همهی فایلهای آپلودی روی فضای ابری ذخیره میشن؛ که موجب سریعتر، امنتر و مقیاسپذیرتر شدن پروژههای جنگویی شما میشه.
.
اگر تجربه کار با django-storages یا اتصال به سرویسهای ابری ایرانی رو داشتی، خوشحال میشم نظرتون رو بدونم!
.
لینک: https://lnkd.in/e9EgFTpC
از لینکدین Farzin Shams
قطعا در پروژههای Django از فایلهای مدیا استفاده کردید و میدونید برای بهینه بودن پروژه بهتره این فایلهارو روی سروری که پروژه ران شده ذخیره نکنید. دلایل مختلفی برای این کار وجود داره! چون:
🔹 سرور فضای محدودی داره
🔹 سرعت پایینه
🔹 بکآپگیری و امنیت سخته
🔹 مقیاسپذیر نیست
اینجاست که django-storages به کمک ما میاد:
یک پکیج کاربردی که کمک میکنه فایلها رو بهجای ذخیرهسازی محلی، روی فضای ابری آپلود کنیم، مثل:
✅ Amazon S3
✅ Google Cloud
✅ Azure
از اونجایی که اکثر سرویس دهندههای خارجی از ایران قابل استفاده نیستن، شما به راحتی میتونید با استفاده از سرویسهای S3 ایرانی مثل ابر آروان، دادیار، لیارا و ... تجربه بهتری رو برای کاربران سایت خودتون رقم بزنید.
.
💡 با این کار، همهی فایلهای آپلودی روی فضای ابری ذخیره میشن؛ که موجب سریعتر، امنتر و مقیاسپذیرتر شدن پروژههای جنگویی شما میشه.
.
اگر تجربه کار با django-storages یا اتصال به سرویسهای ابری ایرانی رو داشتی، خوشحال میشم نظرتون رو بدونم!
.
لینک: https://lnkd.in/e9EgFTpC