Syntax | سینتکس – Telegram
🔒 بیش از ۱.۵ میلیارد تومان ضرر مالی در سال برای بیش از ۲۰ فروشگاه آنلاین ایرانی بخاطر یک باگ کوچک در صفحه ارسال کد تایید پیامکی! 🛡️

اگر شما هم در وبسایتتون امکان ارسال کد پیامکی (OTP) دارید ولی هنوز هیچ تدبیری برای جلوگیری از سواستفاده توسط رباتها اتخاذ نکردید، پیشنهاد میکنم برای جلوگیری از ضرر میلیونی این پست رو مطالعه کنید.

💡اخیرا متوجه یک سواستفاده از سیستم ورود پیامکی وبسایت مجموعهمون شدیم که اگر متوجهش نمیشدیم و یا جلوی اون رو نمیگرفتیم، میتونست سالانه بیش از ۶۰ میلیون تومان به مجموعه خسارت مالی بزنه.

📝 شرح موضوع:
اگر هنگام دریافت شماره موبایل از کاربر برای ارسال کد OTP هیچ کپچایی وجود نداشته باشه، میشه به تعداد زیاد (در برخی موارد بینهایت) درخواست کد OTP برای شمارههای مختلف کرد. این موضوع باعث شده یک سری ابزارهای اذیت و آزار ایجاد بشه که کافیه شماره فردی که میخواین اذیتش کنید رو به اون ابزار بدید تا ظرف یک دقیقه ۳۰تا پیامک کد ورود از سایتهای مختلف و سرشمارههای مختلف برای فرد مورد نظر ارسال بشه.

🔍 عمق مساله:
۱. عدم امکان جلوگیری توسط کاربر: به علت متفاوت بودن سرشماره هایی که پیامک های کد تایید رو ارسال میکنن، امکان بلاک کردنشون برای فردی که مورد مزاحمت قرار گرفته وجود نداره.

همچنین اگر فرد موفق بشه این شماره ها رو بلاک کنه هم در آینده در ورود به سایت های مختلف به مشکل خواهد خورد.

۲. خسارت مالی به شرکتها: همچنین یکی از این ابزارها که از وبسایت مجموعه ما هم داشت سو استفاده میکرد و خدا رو شکر به موقع متوجهش شدیم و جلوش رو گرفتیم، در کمتر از ۱ هفته ای که داشت با ربات درخواست کد ورود برای شماره های مختلف ارسال میکرد، برای ما یک میلیون تومن ضرر مالی داشت که اگر جلوش رو نمی گرفتیم میتونست سالیانه حدود ۶۰ میلیون تومن به ما ضرر مالی بزنه!

✔️ راهکارهایی که برای جلوگیری ازش در نظر گرفتیم:
۱. برای IP هایی که در یک ساعت گذشته، بیش از یک بار درخواست کد ورود داشته اند، کپچای گوگل نمایش داده میشه تا اینگونه ربات ها نتونن پشت سر هم درخواست کد ورود برای شماره های مردم ثبت کنند.

۲. همچنین از اونجایی که معمولا سرور اینجور رباتها خارج از ایران هست، همواره برای آی پی های خارج از ایران، کپچا نمایش داده میشه تا هیچگونه امکان ارسال درخواست توسط این رباتها وجود نداشته باشه. » به این ترتیب کاربران عادی سایت هیچگونه کپچایی نمیبینند و اذیت نمیشن و در عوض در صورت انجام رفتار تکراری و مشکوک توسط کاربر، بهش کپچا نشون داده میشه و جلوی آسیب به سیستم گرفته میشه.

✍️ پ.ن. ۱: البته از اونجایی که معمولا هر مهاجمی در ابتدای کار خیلی ساده تست نفوذ انجام میده، با استفاده از لاگها، آیپیها و شماره موبایل صاحب این ابزار رو پیدا کردیم و از اونجایی که نوجوان بود، بهش تذکر دادیم که در صورت ادامه فعالیت این ابزار مزاحمت، پلیس فتا پیگیر کارش خواهد بود. و به سایر دوستان هم توصیه میکنم به هیچ عنوان حتی برای کنجکاوی سراغ این ابزارها نرید چون ممکنه در صورت داشتن شاکی خصوصی، برای استفادهکنندههای این ابزارها عواقبی ایجاد بشه.

✍️ پ.ن. ۲: از اونجایی که ممکنه منتشر کردن اسم وبسایتهایی که همچنان این باگ رو دارن باعث سواستفاده مضاعف از اونها بشه، ترجیح میدم این پست رو مستقیما برای خود اون مجموعهها ارسال کنم، بنابراین اسمی از هیچ مجموعهای در این پست برده نمیشه.

✍️ پ.ن. ۳: اگر برای پیادهسازی این راهحلها نیاز به راهنمایی دارید، میتونید به بنده پیام بدید.

[Ali soleimani]

#otp

@Syntax_fa
👍14😁2
Syntax | سینتکس
🔒 بیش از ۱.۵ میلیارد تومان ضرر مالی در سال برای بیش از ۲۰ فروشگاه آنلاین ایرانی بخاطر یک باگ کوچک در صفحه ارسال کد تایید پیامکی! 🛡️ اگر شما هم در وبسایتتون امکان ارسال کد پیامکی (OTP) دارید ولی هنوز هیچ تدبیری برای جلوگیری از سواستفاده توسط رباتها اتخاذ…
راه حل ها:

1. یه راه حل که شاید کمک کننده باشه ایجاد وایت لیستی از آی پی ها و کاربرا در کنار یک بلک لیست هست. که البته استراتژی ایجاد این وایت لیست و بلک لیست خودش میتونه متفاوت باشه. مثلا اگه یه شماره و آی پی قبلا ثبت نام کرده و ورود موفق داشته تا مثلا 1 هفته جزء وایت لیستمون باشه و کپچا بهش نشون ندیم. از طرف دیگه اگه یک آی پی یا یک شماره در یک روز بیشتر از 5 تا درخواست ارسال sms داشته باشه بدون اینکه اون کد ارسالی رو وارد کنه خب آی پیش برای همیشه و شمارش برای یه مدت بلاک بشه چرا که اون ربات یا سوء استفاده گر قطعا به اون کد دسترسی نداره.
البته هر دوی این استراتژی ها وابسته به بیزینسمون هست و باید متناسب سازی بشه. با این دو تا استراتژی احتمالا میشه سوء استفاده از سامانمون رو تا حد خوبی کم کرد و از طرفی ورود به سامانه رو برای کاربرای عادیمون پیچیده نکنیم. در کل به نظرم باید خود بیزینس و نحوه ی رفتار مشتریان و شرایطی که خودمون داریم رو هم در نظر بگیریم و بعد یه راه حل متناسب با خودمون پیاده سازی کنیم. حتی پیاده سازی rate limit و کپچا و... هم باید متناسب با شرایط ما باشه. یعنی ما ببینیم چقدر احتمال وجود داره که این مسئله برای ما پیش بیاد و ما چقدر میخوایم روی این قضیه مانور بدیم و راه حلامون چقدر روی کاربرای عادیمون تاثیر منفی میزاره و چطور میتونیم این تاثیر رو مدیریت کنیم بعد بریم سراغ پیاده سازی .

2. این مشکل راه حل های جایگزینی داره که شرکت ها می تونن ازش استفاده کنند که هرکدام مزایا و معایب خودش رو داره ولی به نظرم یکی از بهترین روش ها استفاده از آوانک هست: چون آوانک محدودیت های فوق العاده خاص و جالبی برای عدم استفاده ی بات ها ازش استفاده می کنه و خیلی شرکت های بزرگ دارن ازش استفاده می کنن. avanak.ir

3. بنظرم Csrf هم در کنار کپچا جوابگوئه
اگر بخواهیم امنیت بیشتری داشته باشه rate limitation هم بر اساس آی پی و هم شماره موبایل میشه اضافه کرد

4. فارغ از کپچا که در تمامی شرایط نمی شه ازش استفاده بشه(مش) حتما این دست end point ها باید دو موضوع توش رعایت بشه یکی بحث rate limiting با الگورتیم هایی مثل GCRA و دیگری بحث idempotency

روش پیشنهادی شما چیه؟

#otp

@Syntax_fa
👍8
باگ اینستاگرام

باگ در بخش تصدیق شماره موبایل بوده برای دریافت لینک reset password که بواسطه ایجاد شرایط رقابتی، مهاجم امکان تعریف کردن یک شماره موبایل نا صحیح رو پیدا میکرد.
https://www.securityweek.com/instagram-account-takeover-vulnerability-earns-hacker-30000/

#instagram #bug

@Syntax_fa
👍6
مزدور دنیای برنامه نویسی کیست !!

مزدور دنیای برنامه‌نویسی یک شخصیت خنده‌دار و البته بسیار رایج در این عرصه است. او دارای ویژگی‌های منحصر به‌فردی است که باعث می‌شود در هر شرایطی آماده به خدمت باشد، حتی اگر کاملاً از موضوع بی‌اطلاع باشد.

ویژگی‌های مزدور دنیای برنامه‌نویسی:

١. جملات تکراری و آرام‌بخش:
«بله حتماً»، «چشم، قربان»، «شما دستور بدید، من انجام می‌دم» از جملات محبوب او هستند که در هر شرایطی آنها را تکرار می‌کند.

٢. مهارت‌های گوناگون اما سطحی:
اگر از او بپرسید با چه زبان‌هایی کار می‌کند، لیستی از تمام زبان‌های برنامه‌نویسی را برایتان می گوید(بنده با اسمبلی، سی و پلاس پلاس، سی شارپ، پایتون، پی اچ پی، جی اس و ... حرفه ای کار کردم. خلاصه زبونی نیست که توش سر رشته نداشته باشه)، اما در عمل تنها یکی دو زبان را در سطح ابتدایی بلد است.

٣. رزومه های اغراق‌آمیز:
در رزومه او عناوینی مانند «مهندس نرم‌افزار ارشد»، «توسعه‌دهنده Full-Stack» و «متخصص هوش مصنوعی» درج شده است، اما در واقع او تنها یک برنامه‌نویس مبتدی است(نهایتا با کمک جد و خاندان هوش مصنوعی بتونه کد بزنه).

۴. ادعاهای توخالی:
مزدور دنیای برنامه‌نویسی همیشه ادعاهای بزرگی دارد و می‌گوید می‌تواند پروژه‌های عظیم و پیچیده را در زمان کوتاهی تحویل دهد، اما در عمل کارش چندان تمیز نیست(در واقع خود کثیفه).

۵. سر و گردنه بالا:
او حاضر است برای هر پروژه‌ای، حتی پروژه‌های کاملاً خارج از حیطه تخصصش، قیمت های نجومی بگیرد و همیشه ادعا می‌کند که تنها او می‌تواند آن پروژه را به خوبی انجام دهد(جون جدم کسی نیست در حدم).

۶. مصاحبه‌های فریبنده:
در مصاحبه‌های استخدامی، مزدور دنیای برنامه‌نویسی با زبان چرب و نرم خود سعی می‌کند کارفرما را گول بزند و خود را حرفه‌ای‌تر از آنچه هست جلوه دهد(بالاخره که لو میری مرد/زن حسابی).

در کل، مزدور دنیای برنامه‌نویسی شخصیتی کمدی طور دارد که با ادعاهای بزرگ و وعده‌های توخالی و پروفایل حرفه ای(مبادا بدون دوربین کانن عکس بگیری) سعی می‌کند خود را حرفه‌ای جلوه دهد، اما در عمل چندان تخصص و تجربه‌ای ندارد. با این حال، حضور چنین افرادی در این حرفه نشان‌دهنده اهمیت و درآمدزایی آن است که باعث جذب افراد مزدور می‌شود.

(بدون منبع شیر کنید دست همه مزدور ها برسه)

#مزدور #fun

@Syntax_fa
👍22😁2
اپشن های کلاس متا مدل های جنگو به همراه توضیح

link

#django

@Syntax_fa
👍16
بیاید یکم علمی صحبت کنیم (مواردی هم غیر علمی و نظر شخصی😁)

انسان توانمندی دیدن آینده رو نداره، روش، پیش‌بینی هست و روش پیش‌بینی، سری زمانی و منبع آمار هست

پس با آمار صحبت می کنیم ، آمار که stack overflow سالانه می گیره
۸۴٪ برنامه نویس های دنیا تحصیلات آکادمیک در رشته‌های ict دارند و در سطوح حرفه‌ای این به ۹۴٪ میرسه،(ایران هم همینه، قبلا جادی سالانه آمار می گرفت)

این آمار موفق شده ها هست، کسانی که  مسیر برنامه نویسی رو اومدن و موفق نشدن برنامه نویس بشن رو نداریم

پس من اینجا نظر شخصی خودم رو میدم، برحسب تجربه شخصی از هر ۱۰ نفر که سمت این فیلد میان شاید ۱-۲ نفر برنامه نویس بشن

متاسفانه الان اکثریت(نه همه) سیستم آموزشی غیر رسمی مثل سایت های که دوره می فروشند و منتورها و...
از آموزش درآمدی ندارند، از رویا فروشی درآمد دارند،
مگر جامعه برنامه نویس های ایران چند نفر هست ، که اینقدر بازار بزرگی شده؟

بدبختانه شما نمی خواهد نگران اون حجم افراد ورود به بازار باشید اونها فقط و فقط ۱۶٪ بازار برنامه نویسی رو می گیرند و در سطوح حرفه‌ای ۶٪
و از سمت دیگه اکثرا فقط جیب یک سری افراد رو پر می کنند و با ضرر مالی از بازار میرن😔


راستی بازار آموزش غیر رسمی جزیی از بازار کار ict و رکن مهمی از این بازار هست و بودنش لازم ، و سازمان و افرادی هستند که تلاش می کنند و دوره ها و... خوب ارایه میدن و ارزشمند هم هست،

شما فقط تسلط علمی تو زیاد کن و ارتباطات خوبی بساز هیچ مشکلی در کسب کار و درآمد نخواهی داشت، ارتباطات خیلی خیلی مهمه (طبیعتاًsoft skills بحث مهمی در ارتباطات هست)

[rahim firouzi]

@Syntax_fa
👍20
Syntax | سینتکس
بیاید یکم علمی صحبت کنیم (مواردی هم غیر علمی و نظر شخصی😁) انسان توانمندی دیدن آینده رو نداره، روش، پیش‌بینی هست و روش پیش‌بینی، سری زمانی و منبع آمار هست پس با آمار صحبت می کنیم ، آمار که stack overflow سالانه می گیره ۸۴٪ برنامه نویس های دنیا تحصیلات آکادمیک…
نظر شخصی خودم:
اگه معرفی دوره هارو دیدی که میگن شیش ماه وقت بذار برنامه نویست میکنم و با حقوق عالی وارد بازار کار میشی. قطعا درست نیست.

درصد بالای شکست یکیش همین مورد هستش. از بیرون همه چی خوب بنظر میرسه ولی وقتی وارد میشی میبینی قضیه کلا فرق میکنه و خب ول میکنی میری.

در نهایت فرقی نمیکنه تحصیلات آکادمیک دارید یا نه. باید بتونید خودتون رو تبدیل به یه برنامه نویس کنید. ولی اگه آکادمیک رو هم پیش ببرید مسیر براتون راحت تر میشه.
👍19
چالش طراحی سیستم ارسال نوتیفیکیشن


در نظر بگیرید که قراره یه سرویس نوتیفیکیشن رو طراحی کنید که شرایط زیر رو داشته باشه:
- بتونه برای همه کاربران سیستم (بیش از ۵۰ میلیون کاربر) نوتیفیکیشن ارسال کنه
- بتونه برای یک سری از کاربران (مثلا ۱۰ میلیون کاربر) نوتیفیکیشن ارسال کنه
- بشه از طریق کانال های مختلف (ایمیل، پیامک، نوتیفیکیشن درون برنامه ای) ارسال کرد
- بشه نوتیفیکیشن های درون برنامه ای کاربران رو ردیابی کرد که وضعیت شون خوانده شده، خوانده نشده است

دغدغه اول، طراحی دیتابیس رو چطور انجام میدید که هم نوتیفیکیشن سیستمی رو پشتیبانی کنه و هم نوتیفیکیشن برای تعدادی کاربر؟ به ازاء هر کاربر یک رکورد در دیتابیس ذخیره می کنید؟ چه دیتابیسی رو استفاده می کنید؟

دغدغه دوم، ارسال این همه نوتیفیکیشن از طریق کانال های مختلف رو چطوری مدیریت می کنید؟ از چه ابزارهایی استفاده می کنید؟

دغدغه سوم، مدیریت وضعیت نوتیفیکیشن های درون برنامه ای رو چطوری انجام میدید؟‌از چه الگو و چه ابزارهایی استفاده میکنید؟

اگه تمایل داشتید نظر بدید میتونید ویس بفرستید تو کامنت

اگه در مورد این چالش طراحی منبع خوبی رو میشناسید لینکش رو به اشتراک بذارید

@gocasts

#challenge

@Syntax_fa
👍131
چند نکته مهم وقتی تو جنگو از سواگر استفاده می کنی(پکیج drf-spectacular)

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

اشتباه نشون دادن request و response ای پی آی ها:
رایج ترین مشکل این مورد هستش که خیلی وقتا ورودی و یا خروجی api رو اشتباه نشون میده. یا اصلا ریسپانس شما چند تا حالت داره مثل:
200
406
401

اما بصورت اتوماتیک نمیتونه این موارد رو تشخصی بده. پس راه حل چیه؟
استفاده از دکوریتور extend_schema بالای متد هاتون.
مثلا:
    @extend_schema(request=RefreshAccessTokenSerializer, responses={
200: OpenApiResponse(response=AccessTokenSerializer, denoscription="new access token"),
401: OpenApiResponse(denoscription="invalid access token")}, tags=SCHEMA_TAGS)
def post(self, request):
...


ریکوئست رو توی request و ریسپانس هارو به این شکل توی responses مشخص می کنیم.


مشخص کردن تگ ها:
اگه api هاتون به این صورت شروع بشه:
/api/v1/
تگ همه api های شما v1 میشه و خوانایی رو میاره پایین. برای برطرف کردن این مشکل تگ هارو بصورت دستی مشخص می کنیم.
مثلا:
    @extend_schema(tags=("Auth",))
def post(self, request):
...


محدود کردن دسترسی به سواگر
اگه دوست دارید سواگر پروژه رو فقط ادمین بتونه ببینه، توی تنظیمات spectacular این موارد رو اضافه کنید:
# Spectacular
SPECTACULAR_SETTINGS = {
'SERVE_INCLUDE_SCHEMA': True,
# OTHER SETTINGS
'PLUGINS': [
'drf_spectacular.plugins.AuthPlugin',
],
'SERVE_PERMISSIONS': ['rest_framework.permissions.IsAdminUser'],
# Auth with session only in docs without effect to api
'SERVE_AUTHENTICATION': ["rest_framework.authentication.SessionAuthentication",
"rest_framework_simplejwt.authentication.JWTAuthentication"],
}


توضیح:
پرمیشن رو تنظیم کرده که حتما ادمین باشه. همچنین authentication رو به دو روش سشن و توکن مشخص کردیم.

#Django #Swagger

@Syntax_fa
👍11🔥2
درود
من علیرضا، توسعه دهنده بک اند وب هستم(پایتون و گولنگ). تقریبا 4 سال پیش برنامه نویسی رو با زبان پایتون شروع کردم. کمی بعدش رفتم سمت وب و با جنگو آشنا شدم.

زبان گولنگ رو چند ماهی میشه شروع کردم و باهاش چند تا وب سرور با gin و net/http و fiber زدم. البته دوست دارم تو آینده با تمرکزی بیشتری ادامه بدمش.

به قول لینکدینی ها «امسال تصمیم گرفتم که چالش جدیدی رو تجربه کنم. اصلنم ربطی به این نداره که الان بیکارم و دنبال کار میگردم»

خوشحال میشم اگه تو تیمتون دنبال یه بک اند دولوپر با انگیزه و خلاق هستید، بهم خبر بدید.
(ریموت و یا حضوری تهران)

https://news.1rj.ru/str/Ayeef
🔥11👍31
1712043058828.pdf
1.3 MB
اصول و قواعدی که برنامه نویس ها باید بدونن

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

اصول و قواعد کلی

- YAGNI
- DRY
- KISS (Keep It Simple, Stupid)
- SoC (Separation of Concerns)
- POLA
- DIP (Dependency Inversion Principle)
- LoD (Law Of Demeter)
- TDD (Test-Driven Development)
- SOLID Principles
- CI/CD

link

@Syntax_fa
👍10🔥21
How to use annotations in python.pdf
699.1 KB
نحوه استفاده از Annotations در پایتون

خوب خیلی ها اسم annotations به گوششون نخورده و یا اینکه مستقیما باهاش درگیر نشدن بلکه بیشتر جا ها دیدن ولی پاکش کردن! مثل اوایل کار من.
واقعیت اینه که اگر یه تعریف ساده ازش بخوام بکنم ،Annotation در واقع meta-data ای هستش که شما به بخش های کد اضافه میکنید تا خطایابی و درک کد بهتر بشه.
اما مدل های مختلفی از annotation ها رو ممکنه ببینید که یکسری روی متغیر ها، کلاس ، توابع ، ورودی و خروجی ها ، توضیحات کلی و ... قرار میگیرن.
همچنین در زمان ایجاد داکیومنتری هم خیلی کاربرد داره و بیش از پیش استفاده میشه.
معمولا از زمانی که شما با روابط شئ گرایی درگیر میشید شروع بهش شناخت annotation ها و موارد استفاده اون می کنین.

از انواع اون میشه به موارد زیر اشاره کرد:

- Type Annotations
- Custom Metadata Annoations
- Parameter Annotations
- Module Annotations
- Attribute Annotations
- Return Annotations

link

#python #annotation

@Syntax_fa | @Syntax_fa_group
👍5
اگه دنبال یه بات تلگرام میگردین که با استفاده از ChatGPT به سوالای اعضا جواب بده و امکان RateLimit کردن تعداد سوالای کاربرا رو هم داشته باشه، همچنین به زبان Go نوشته شده باشه کد زیر به دردتون میخوره.

https://github.com/m-ariany/telegram-gpt-bot

@Syntax_fa | @Syntax_fa_group
👍6
ورژن برنامه نویسیه این پست:

ببین رفیق
چند ساله دیگه کسی ازت نمی‌پرسه چند تا زبون برنامه نویسی بلد بودی. با کدوماشون پروژه پروداکشن زدی، رو کدوماشون تعصب داشتی!
چند سال دیگه ازت میپرسن

تخصصت چیه؟ درآمدت چقدره؟ بوگاتیت چه رنگیه؟

میدونم تلخه ولی باید باهاش کنار بیای. اصلا مهم نیست پی اچ پی کد میزنی یا راست
مهم اینه کدومش تو رو به پول میرسونه

راست خوبه
گولنگ خوبه
سی شارپ بد نیست
ولی تعصب به اندازش
هدفتو دنبال کن نوب🫶

#fun

@Syntax_fa
🤣30👍64🤨1