و در نهایت access token داده میشه به کلاینت و ما توی وبسایت لاگین میشیم.
❤1
🕸 Articles
وقتی وارد وبسایت میشیم این درخواست از سمت کلاینت زده میشه اینجا هست که وارد بخش تبدیل Authorization Code به Access Token میشیم. GET /google-login?state={"state":"kTWrjEKytCtTRyFhFbrf7G","reauth":false,"from":"\/goodbye","signupOrigin":"global-signup-modal…
یه توضیح اضافه تر راجب اینکه چطوری کلاینت میاد و access token رو دریافت میکنه بگم
این مرحله توی مرورگر کاربر انجام نمیشه، بلکه کلاینت پشتصحنه یه درخواست دیگه به سرور OAuth میزنه
کلاینت این درخواست رو از سمت سرور خودش به Authorization Server (گوگل) میفرسته:
توی این درخواست، Authorization Code که از قبل توی URL بود، ارسال میشه به گوگل.
اگه این درخواست موفقیتآمیز باشه، گوگل یه Access Token برمیگردونه، مثل این:
این مرحله توی مرورگر کاربر انجام نمیشه، بلکه کلاینت پشتصحنه یه درخواست دیگه به سرور OAuth میزنه
کلاینت این درخواست رو از سمت سرور خودش به Authorization Server (گوگل) میفرسته:
POST https://oauth2.googleapis.com/token
Content-Type: application/x-www-form-urlencoded
client_id=YOUR_CLIENT_ID
&client_secret=YOUR_CLIENT_SECRET
&code=4/0AQSTgQFzS9eHAd2HHL9-GEX4BsDgucBYuBwWuOFhFp8puAa1TgAihhDnQITlvHKRo8TTdA
&redirect_uri=https://yourwebsite.com/google-login
&grant_type=authorization_code
توی این درخواست، Authorization Code که از قبل توی URL بود، ارسال میشه به گوگل.
اگه این درخواست موفقیتآمیز باشه، گوگل یه Access Token برمیگردونه، مثل این:
{
"access_token": "ya29.A0AfH6SM...",
"expires_in": 3600,
"refresh_token": "1//0gQ...",
"scope": "email profile openid",
"token_type": "Bearer"
}❤2
🕸 Articles
Photo
حالا که کلاینت Access Token داره، یه درخواست به ریسورس سرور (مثلاً API گوگل) میفرسته:
ریسورس سرور (یعنی www.googleapis.com) بررسی میکنه که توکن معتبره یا نه،
اگه معتبر باشه، اطلاعات کاربر رو برمیگردونه:
{
"sub": "110169484474386276334",
"name": "zarvan0x01",
"given_name": "zarvan",
"family_name": "zurvanism",
"email": "zarvan@gmail.com",
"picture": "https://lh3.googleusercontent.com/a-/AOh14Gj..."
}
حالا کلاینت چیکار میکنه؟
✅ اطلاعات کاربر رو ذخیره میکنه.
✅ کاربر رو به حالت لاگینشده درمیاره.
✅ احتمالاً یه سشن (Session) یا کوکی (Cookie) بسته به نوع پیاده سازیش برای کاربر ایجاد میکنه که لاگینش حفظ بشه.
و اینجوریه که کاربر بدون دیدن Access Token، لاگین میشه! توی این مرحله که ریپلای زدم اگر یادتون باشه بعد از ریدارکت به کلاینت یهو ما دیدیم که لاگین شدیم
ولی اون پشت برای لاگین شدن این درخواست ها هم زده شده
GET https://www.googleapis.com/oauth2/v3/userinfo
Authorization: Bearer ya29.A0AfH6SM...
ریسورس سرور (یعنی www.googleapis.com) بررسی میکنه که توکن معتبره یا نه،
اگه معتبر باشه، اطلاعات کاربر رو برمیگردونه:
{
"sub": "110169484474386276334",
"name": "zarvan0x01",
"given_name": "zarvan",
"family_name": "zurvanism",
"email": "zarvan@gmail.com",
"picture": "https://lh3.googleusercontent.com/a-/AOh14Gj..."
}
حالا کلاینت چیکار میکنه؟
✅ اطلاعات کاربر رو ذخیره میکنه.
✅ کاربر رو به حالت لاگینشده درمیاره.
✅ احتمالاً یه سشن (Session) یا کوکی (Cookie) بسته به نوع پیاده سازیش برای کاربر ایجاد میکنه که لاگینش حفظ بشه.
و اینجوریه که کاربر بدون دیدن Access Token، لاگین میشه! توی این مرحله که ریپلای زدم اگر یادتون باشه بعد از ریدارکت به کلاینت یهو ما دیدیم که لاگین شدیم
ولی اون پشت برای لاگین شدن این درخواست ها هم زده شده
❤1
حالا اگر access token منقضی بشه چی؟
وقتی Access Token منقضی میشه، کلاینت باید این درخواست رو به Authorization Server بفرسته:
اگه Refresh Token معتبر باشه، سرور یه Access Token جدید میده:
✅ حالا کلاینت از Access Token جدید برای درخواستهاش استفاده میکنه.
وقتی Access Token منقضی میشه، کلاینت باید این درخواست رو به Authorization Server بفرسته:
POST /token HTTP/1.1
Host: authorization-server.com
Content-Type: application/x-www-form-urlencoded
grant_type=refresh_token
&refresh_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
&client_id=your-client-id
&client_secret=your-client-secret
اگه Refresh Token معتبر باشه، سرور یه Access Token جدید میده:
{
"access_token": "new-access-token-123",
"token_type": "Bearer",
"expires_in": 3600
}
✅ حالا کلاینت از Access Token جدید برای درخواستهاش استفاده میکنه.
❤2
اگه Refresh Token هم منقضی بشه چی؟
اگه Refresh Token هم منقضی بشه یا سرور تشخیص بده که نباید دیگه ازش استفاده بشه، این پیام برمیگرده معمولا:
اینجا کاربر باید دوباره لاگین کنه تا یه Refresh Token جدید بگیره
یه نکته رو بگم ما با استفاده از Refresh Token برای گرفتن Access Token جدید استفاده میکنیم.
اگه Refresh Token منقضی بشه، کاربر باید دوباره لاگین کنه
پس استفاده ما از Refresh Token فقط برای گرفتن یه Access Token جدید هست.
اگه Refresh Token هم منقضی بشه یا سرور تشخیص بده که نباید دیگه ازش استفاده بشه، این پیام برمیگرده معمولا:
{
"error": "invalid_grant",
"error_denoscription": "Refresh token is expired"
}اینجا کاربر باید دوباره لاگین کنه تا یه Refresh Token جدید بگیره
یه نکته رو بگم ما با استفاده از Refresh Token برای گرفتن Access Token جدید استفاده میکنیم.
اگه Refresh Token منقضی بشه، کاربر باید دوباره لاگین کنه
پس استفاده ما از Refresh Token فقط برای گرفتن یه Access Token جدید هست.
❤1
خب Refresh Token باید یه مکانیسم لغو داشته باشه تا اگه لو رفت، کاربر بتونه از همهجا لاگاوت بشه.
سرور یه API میده که کلاینت میتونه توکنها رو باطل کنه
درخواست برای لغو (Revoke) یک Access Token
بعد از این درخواست، توکن دیگه معتبر نیست و نمیشه باهاش درخواست زد.
سرور یه API میده که کلاینت میتونه توکنها رو باطل کنه
درخواست برای لغو (Revoke) یک Access Token
POST /revoke
Content-Type: application/x-www-form-urlencoded
token=ACCESS_TOKEN
&client_id=your-client-id
&client_secret=your-client-secret
بعد از این درخواست، توکن دیگه معتبر نیست و نمیشه باهاش درخواست زد.
❤2
من سعی کردم فلوی کلی رو بگم هر چیزی که نیاز بود. یادتون باشه ما برنامه نویس نیستیم وگرنه کلی مطالب دیگه هم هست برای گفتن
قبل از اینکه وارد آسیب پذیری های oauth بشیم اگر سوالی دارید راجب فلو ها بپرسید
سعی کن همه موارد رو بررسی کنید چند تا سایت رو باز کنید و فلوی oauth رو توی برپ سوییت دنبال کنید تا مطالب خوب براتون جا بیفته.
قبل از اینکه وارد آسیب پذیری های oauth بشیم اگر سوالی دارید راجب فلو ها بپرسید
سعی کن همه موارد رو بررسی کنید چند تا سایت رو باز کنید و فلوی oauth رو توی برپ سوییت دنبال کنید تا مطالب خوب براتون جا بیفته.
🔥2
یه جمله هست میگه:
توی هر تهدیدی یه فرصت هست.
من خیلی هارو دیدم که نگران هوش مصنوعی هستن برای اینکه آیا با اومدنش یه شغلی رو شروع کنن یا نه! یا اینکه میگن با اومدن هوش مصنوعی شغل ما از بین میره
به نظرم فقط باید از هر چیزی که دم دستتون هست برای رسیدن به هدفتون استفاده کنید.
توی هر تهدیدی یه فرصت هست.
من خیلی هارو دیدم که نگران هوش مصنوعی هستن برای اینکه آیا با اومدنش یه شغلی رو شروع کنن یا نه! یا اینکه میگن با اومدن هوش مصنوعی شغل ما از بین میره
به نظرم فقط باید از هر چیزی که دم دستتون هست برای رسیدن به هدفتون استفاده کنید.
👍6
یه ابزار ساختم که یه لیست سابدامنه میگیره، میده به هوش مصنوعی و اونم سابدامنههای جدید برات میسازه. دوتا حالت داره: یا خودت لیست رو بهش بدی، یا اگه چیزی ندی، خودش میره از crt.sh سابدامنههای تارگت رو میگیره و بعد یه لیست جدید تحویلت میده."
این ابزار قابلیت پیشرفته شدن خیلی داره ولی فقط خواستم بگم به جای نگران بودن از موقعیت پیش اومده استفاده کنید.
@web_articles
این ابزار قابلیت پیشرفته شدن خیلی داره ولی فقط خواستم بگم به جای نگران بودن از موقعیت پیش اومده استفاده کنید.
@web_articles
❤5👍1
در این مقاله Web Timing Attack رو شکافتیم - تکنیکی که با تحلیل زمان پاسخ سرور، اطلاعات حساس رو از سیستم قربانی استخراج میکنه.
👍6
web timing attacks.pdf
3.6 MB
😍12❤3👏2⚡1
سلام به همه امیدوارم حالتون خوب باشه
دومین مقاله من راجب HTTP Host Header Attacks هست
توی این مقاله سعی کردم به صورت عمیق این آسیب پذیری رو بررسی کنم.
دومین مقاله من راجب HTTP Host Header Attacks هست
توی این مقاله سعی کردم به صورت عمیق این آسیب پذیری رو بررسی کنم.
🔥13👏1
HTTP Host Header Attacks.pdf
2.9 MB
🥰14👏4⚡3❤2🔥1😍1
خب coming soon کافیه دیگه
سومین آسیب پذیری که بهش پرداختم CORS Misconfigoration هست.
اول از همه گفتیم cors چیه؟
چطوری کار میکنه؟
چطوری پیاده سازی میشه؟
و در نهایت چه آسیب پذیری هایی داره
سومین آسیب پذیری که بهش پرداختم CORS Misconfigoration هست.
اول از همه گفتیم cors چیه؟
چطوری کار میکنه؟
چطوری پیاده سازی میشه؟
و در نهایت چه آسیب پذیری هایی داره
❤9