PDA

View Full Version : جلوگیری از حملات csrf



likemoonn
چهارشنبه 13 دی 1396, 14:40 عصر
سلام به همه
یه \روژه بزرگ تحت وب دارم که قرار در برابر حملات csrf امن بشه من میخوام این کارو با استفاده از توکن csrf انجام بدم لطفا یه روش برای \یاده سازی بهم معرفی کنید و یه نمونه یا sample بم نشون بدید.

Tekyegah
چهارشنبه 13 دی 1396, 18:22 عصر
سلام به همه
یه \روژه بزرگ تحت وب دارم که قرار در برابر حملات csrf امن بشه من میخوام این کارو با استفاده از توکن csrf انجام بدم لطفا یه روش برای \یاده سازی بهم معرفی کنید و یه نمونه یا sample بم نشون بدید.

سلام
این مطلب رو بخونید :
https://security.itpro.ir/tutorials/32256/%d8%a2%d8%b4%d9%86%d8%a7%db%8c%db%8c-%d8%a8%d8%a7-%d8%ad%d9%85%d9%84%d8%a7%d8%aa-csrf-%d8%a8%d8%ae%d8%b4-%d8%af%d9%88%d9%85

likemoonn
جمعه 15 دی 1396, 21:15 عصر
سلام
این مطلب رو بخونید :
https://security.itpro.ir/tutorials/32256/%d8%a2%d8%b4%d9%86%d8%a7%db%8c%db%8c-%d8%a8%d8%a7-%d8%ad%d9%85%d9%84%d8%a7%d8%aa-csrf-%d8%a8%d8%ae%d8%b4-%d8%af%d9%88%d9%85

مرسی دوست عزیز ولی هیچ راه حلی اینجا نبود فقط تعریف و نحوه ی حمله رو شرح داده بود، من راه حل قابل پیاده سازی میخوام

Tekyegah
جمعه 15 دی 1396, 23:12 عصر
ببنید چیزی که به ذهنم میرسه این هست که :


Dim LinkVorod1 As String = Request.ServerVariables.Item("HTTP_REFERER")

آدرس صفحه قبل که به صفحتون درخواست اومده رو بهتون میده .

چک کنید ببنید اگه لینک ورود مستقیم بود پس csrf هست . اگه صفحه ای غیر از صفحه مد نظرتون بود csrf هست ...

مثلا : کد شما در صفحه engine.aspx هست .
و باید از صفحه index.aspx برای صفحه engine.aspx درخواست ارسال شه .

شما تو page load صفحه engine.aspx این کد رو بذارید و چک کنید آیا از index.aspx ( البته لینک کامل میده این کد ) اومده یا از صفحه دیگه ای ...

پس صفحه ای غیر از صفحه خودتون و ورود مستقم هر 2 csrf هستن .

likemoonn
شنبه 16 دی 1396, 08:22 صبح
ببنید چیزی که به ذهنم میرسه این هست که :


Dim LinkVorod1 As String = Request.ServerVariables.Item("HTTP_REFERER")

آدرس صفحه قبل که به صفحتون درخواست اومده رو بهتون میده .

چک کنید ببنید اگه لینک ورود مستقیم بود پس csrf هست . اگه صفحه ای غیر از صفحه مد نظرتون بود csrf هست ...

مثلا : کد شما در صفحه engine.aspx هست .
و باید از صفحه index.aspx برای صفحه engine.aspx درخواست ارسال شه .

شما تو page load صفحه engine.aspx این کد رو بذارید و چک کنید آیا از index.aspx ( البته لینک کامل میده این کد ) اومده یا از صفحه دیگه ای ...

پس صفحه ای غیر از صفحه خودتون و ورود مستقم هر 2 csrf هستن .

میشه لطفا یه تیکه کد کامل برام بزارید؟:افسرده: میخوام از حمله ی csrf جلوگیری کنم و کسی نتونه حمله کنه مثلا url صفحه قابل دسترسی نباشه و اگر از ظریق دیگه ای حمله شد مشخص کنه برام از طریق یه \یام

Tekyegah
شنبه 16 دی 1396, 19:06 عصر
من از این کد برای ثبت ورودی های سایتم ( جهت آمارگیری ) استفاده میکنم .

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

شما میشه یه مثال بزنید .

مثلا بگید فلان قسمت سایتم این طوری هست ، این هم کدش ... و با csrf اینطوری بهش حمله میشه و میخوام جلوی این حمله رو بگیرم ...

اینطوری من صورت مسئله شما رو میدونم و میتونم بهتر راهنماییتون کنم.

likemoonn
یک شنبه 17 دی 1396, 08:31 صبح
ببینید وقتی که من وب پیجم میاد بالا و از صفحه م inspect میگیرم به url صفحه م دسترسی دارم، ینی میتونم از بخش network , headers request url رو ببینم، بعد با کپی کردن اون آدرس در هر جای دیگه ای صفحه رو باز کنم، ولی نمیخوام این دسترسی وجود داشته باشه ینی نمیخوام کسی با داشتن ادرس دوباره بتونه اون صفحه رو باز کنه (تصویر) میخوام بتونم با هر بار باز کردن صفحه آدرس یک توکن ایجاد شه دنبال یو ار ال و دیگه قابل استفاده نباشه.
147412

likemoonn
یک شنبه 17 دی 1396, 08:37 صبح
ببنید میخوام url چیزی شبیه این باشه
example.com/pagename.aspx?token=uZVTLBCWcw33RIhvnbxTKxTxM2rKJ7 YJrwyUXhXn

Tekyegah
یک شنبه 17 دی 1396, 18:38 عصر
سلام
اینطوری بهتر شد .

در ابتدا باید بگم که شما اگه به حای GET از POST استفاده کنید و توی Network مرورگر برید و تست کنید ... متوجه میشید که فقط URL خالی رو به کاربری که چک میکنه نشون میده و نشون نمیده که چه مقداریری با چه DATAیی ارسال شده .

برمیگردیم روی خود امنیت ...

ببینید فرض میکنیم شما شماره وسیله نقلیه رو میفرستید ، نام و تلفن رو برگشت میدید .

الان من تو صفحه http://example.com/Page1.aspx درسته .
درخواست رو با jquery سمت صفحه ای که میخواین مقادیر رو برگرنه مثلا: http://example.com/pagename.aspx?shomare=123456 ارسال کردم .

شما کافیه توی pageload صفحه http://example.com/pagename.aspx این کد رو اضافه کنید :

VB:

Dim LinkVorod1 As String = Request.ServerVariables.Item("HTTP_REFERER")

#C :

string LinkVorod1 = Request.ServerVariables.Item["HTTP_REFERER"];

3 حالت وجود داره :
حالت 1 : اینه که از صفحه page1 درخواست با jquery داده شده به صفحه pagename

مقدار LinkVorod1 میشه : http://example.com/Page1.aspx

حالت 2 : از یه صفحه دیگه یا سایت دیگه درخواست داده شده که مقدار LinkVorod1 میشه آدرس اون سایت

حالت 3 : این هست که کاربرتون مستقیم توی مرورگر وارد کنه که فکر کنم مقدار LinkVorod1 خالی میشه .

خب ...

حالا شما میتونید شرط بذارید که اگه مقدار LinkVorod1 برابر بود با http://example.com/Page1.aspx ، کد بصورت درست فراخوانی شده و برید select هاتون رو بزنید در غیر اینصورت exit !!!

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

likemoonn
یک شنبه 17 دی 1396, 19:23 عصر
من از روش شما استفاده کردم در مورد بررسی ریقرر ها که به ضورت مستقیم وارد نشده باشه و دراین صورت ریدایرکت میکنم به یه پیچ حطا
اما میخوام در یک سطح دیگه هم بررسی کنم اون هم کد کردن یو ار ال هستش با استفاده از توکن وگرنه ازون توضیح اولتون استفاده کردم اما این یکار رو هم میخوام انچام بدم چون توی کد متد get هم داریم و من نمیخوام دست ببرم توی بقیه صفحه

kamranetemadi
شنبه 23 دی 1396, 11:32 صبح
https://stackoverflow.com/questions/1321508/generating-antiforgerytoken-in-webforms

general67
شنبه 30 دی 1396, 14:18 عصر
خوب خود شما میگید میخوام با توکن اینکار رو انجام بدم.آیا نحوه اجرا و کد نویسی رو بلد نیستید؟
الان سایت های تازه طراحی شده از توکن برای اینکه متوجه بشن در خواست داده شده از ظرف خودشونه.
برای طراحی و استفاده هم کار سختی نیست .شما باید یک توکن بسازید و اون رو تو وب سایت با ورودی مخفی ذخیره کنید و هر جا که خواستید استفاده نمایید.