PDA

View Full Version : امنیت فایل های ایجکس



H:Shojaei
یک شنبه 10 خرداد 1394, 11:17 صبح
آیا امکانش هست که اسکریپتی نوشته بشه که از بیرون سایت به یک صفحه که به وسیله ایجکس اجرا میشه درخواست فرستاده بشه و فایل بهش جواب بده؟
اگر اینطوری باشه بهترین راه برای جلوگیری از کار چیه؟
به نظر خودم اگر همچین چیزی وجود داشته باشه که مثلا یک فرم طراحی بشه که همون مقادیری که در فایل ایجکس دریافت میشه رو ارسال کنه ولی از بیرون سایت باشه جلوگیری ازش با یک سشن که وقتی کاربر وارد سایت میشه ساخته بشه امکان پذیره این سشن وقتی کاربر میاد تو سایت ساخته میشه و تو فایل ایجکس چک میشه وقتی درخواستی به جز از سایت اومد سشنی واسه اون درخواست وجود نداره بنابراین درخواست تشخیص داده میشه...!

imohammad
یک شنبه 10 خرداد 1394, 12:34 عصر
من تست کردم ajax نمیتونه رو یه سرور دیگه ریموت شه
شایدم من اشتباه انجام دادم

fatima-php
یک شنبه 10 خرداد 1394, 12:38 عصر
میشه. بستگی به تنظیمات سرور داره. بهترین روش اینه که مثل جلوگیری از CSRF عمل کنید. توی هر صفحه که میخواد با AJAX کار کنه، یک متغیر تصادفی توی سشن بگذارین و توی صفحه مقصد AJAX چک کنید اگه مقدار درست ارسال شده بود، جواب بدین وگرنه جوابی بهش ندین.

H:Shojaei
یک شنبه 10 خرداد 1394, 12:43 عصر
میشه. بستگی به تنظیمات سرور داره. بهترین روش اینه که مثل جلوگیری از CSRF عمل کنید. توی هر صفحه که میخواد با AJAX کار کنه، یک متغیر تصادفی توی سشن بگذارین و توی صفحه مقصد AJAX چک کنید اگه مقدار درست ارسال شده بود، جواب بدین وگرنه جوابی بهش ندین.
بله من هم همین منظورم بود ممنون پس همین روش اصولیه...

H:Shojaei
یک شنبه 10 خرداد 1394, 12:48 عصر
if($_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest') {
//Request identified as ajax request

if(@isset($_SERVER['HTTP_REFERER']) && $_SERVER['HTTP_REFERER']=="http://yourdomain/ajaxurl")
{
//HTTP_REFERER verification
if($_POST['token'] == $_SESSION['token']) {
//do your ajax task
//don't forget to use sql injection prevention here.
}
else {
header('Location: http://yourdomain.com');
}
}
else {
header('Location: http://yourdomain.com');
}
}
else {
header('Location: http://yourdomain.com');
}

saeedvir
یک شنبه 10 خرداد 1394, 17:27 عصر
if($_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest') {
//Request identified as ajax request

if(@isset($_SERVER['HTTP_REFERER']) && $_SERVER['HTTP_REFERER']=="http://yourdomain/ajaxurl")
{
//HTTP_REFERER verification
if($_POST['token'] == $_SESSION['token']) {
//do your ajax task
//don't forget to use sql injection prevention here.
}
else {
header('Location: http://yourdomain.com');
}
}
else {
header('Location: http://yourdomain.com');
}
}
else {
header('Location: http://yourdomain.com');
}


این روش به راحتی قابل دور زدن هست.

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

H:Shojaei
یک شنبه 10 خرداد 1394, 19:27 عصر
این روش به راحتی قابل دور زدن هست.

بهترین کار اینه که فایل پردازشی تون رو به صورت امن بنویسید.
یعنی چی فایل پردازشی به صورت امن؟!

2undercover
یک شنبه 10 خرداد 1394, 20:05 عصر
آیا امکانش هست که اسکریپتی نوشته بشه که از بیرون سایت به یک صفحه که به وسیله ایجکس اجرا میشه درخواست فرستاده بشه و فایل بهش جواب بده؟
اگر اینطوری باشه بهترین راه برای جلوگیری از کار چیه؟
به نظر خودم اگر همچین چیزی وجود داشته باشه که مثلا یک فرم طراحی بشه که همون مقادیری که در فایل ایجکس دریافت میشه رو ارسال کنه ولی از بیرون سایت باشه جلوگیری ازش با یک سشن که وقتی کاربر وارد سایت میشه ساخته بشه امکان پذیره این سشن وقتی کاربر میاد تو سایت ساخته میشه و تو فایل ایجکس چک میشه وقتی درخواستی به جز از سایت اومد سشنی واسه اون درخواست وجود نداره بنابراین درخواست تشخیص داده میشه...!

استفاده از Token که کاملا قابل دور زدن هست یعنی این که ربات اول میاد صفحه رو باز می کنه Token رو توی صفحه پیدا می کنه و کوکی ای رو که مربوط به Session هست رو هم برای درخواست های بعدی ذخیره می کنه و بعد هم ازش استفاده می کنه و می تونه راحت چندین بار درخواست بده؛ یعنی مثل یک کاربر عادی با نیت رباتی :)

استفاده از HTTP Referer هم که قابل دور زدن هست چون یک Header هست که توسط مرورگر ارسال میشه.



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

H:Shojaei
یک شنبه 10 خرداد 1394, 20:20 عصر
کدهای php با ارسال فرم فراخوانی نمیشن که کپچا بذارم با یک رویداد مثلا کلیک لینک اجرا میشن!
پس کپچا هم کاربردی نداره عملا...

2undercover
یک شنبه 10 خرداد 1394, 20:30 عصر
عملا نمیشه جلوی این کار رو گرفت ولی میشه این قدر سختش کرد که که حمله کننده منصرف بشه.

H:Shojaei
یک شنبه 10 خرداد 1394, 20:35 عصر
خوب اگر اینطوری باشه که هر کسی میتونه هر تابع ایجکسی رو اجرا کنه! با ارسال مقادیر!
حالا اگر از فایل خونده بشه باز هم به همین مشکل میخوره؟ فرض کنید یک کلید داخل فایلی گذاشته میشه و با جاوااسکریپت فایل مقدارش با ایجکس فرستاده میشه و باز سمت سرور هم فایله خونده میشه و هر چند وقته هم فایله محتواش تعویض بشه؟!

2undercover
یک شنبه 10 خرداد 1394, 21:42 عصر
تفاوتی نداره. در واقع شما هر کار بکنید ربات می تونه با تقلید کاری که کاربر واقعی و مرورگر توی صفحه انجام می دهند به نتیجه برسه. مگر این که از روشی برای شناسایی انسان بودن استفاده کنید که فقط توسط انسان قابل انجام باشه (که البته همونطور که گفتم در نهایت اگر واقعا قصد خاصی داشته باشند می تونند با استفاده از انسان هم این کار رو انجام بدهند).

Unique
دوشنبه 11 خرداد 1394, 02:32 صبح
نمیدونم چرا امشب هر پستی را میخونم به نظرم عجیب میاد !
ajax یک تکنیک هست و عملا GET و POST با همون HTTP Protocol اتفاق میفته ! یعنی از نظر علمی ارسال از طریق یک FORM معمولی و یا با Ajax هیچ تفاوتی با هم ندارن و در واقع Round Trip در پشت انجام میشه و صفحه نیاز به بارگزاری مجدد نداره.

حالا مشکل امنیتی که شما میخواین مانعش بشین دقیقا چیه ؟ چه اهمیتی داره که کسی به صورت Remote فایلی که شما بهش Ajax میزنید را فراخونی کنه ؟ اگه میخواین جلوی روبات ها را بگیرین که بهترین کار همون Captcha هست. خلاصه ما را روشن کنید که نکنه در گمراهی هستیم و سایت هامون در خطره !

tresa022
دوشنبه 11 خرداد 1394, 05:17 صبح
دوست عزیز من فک میکنم این دوستان ما بیشتر نگران حملات برات فورس مثلا اگه یه فرم لاگین باشه خواهید دید که میشه با روبات به سادگی به اون صفحه که اطلاعاتی میفرستی حمله کرد و ....

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

H:Shojaei
دوشنبه 11 خرداد 1394, 12:12 عصر
نمیدونم چرا امشب هر پستی را میخونم به نظرم عجیب میاد !
ajax یک تکنیک هست و عملا GET و POST با همون HTTP Protocol اتفاق میفته ! یعنی از نظر علمی ارسال از طریق یک FORM معمولی و یا با Ajax هیچ تفاوتی با هم ندارن و در واقع Round Trip در پشت انجام میشه و صفحه نیاز به بارگزاری مجدد نداره.

حالا مشکل امنیتی که شما میخواین مانعش بشین دقیقا چیه ؟ چه اهمیتی داره که کسی به صورت Remote فایلی که شما بهش Ajax میزنید را فراخونی کنه ؟ اگه میخواین جلوی روبات ها را بگیرین که بهترین کار همون Captcha هست. خلاصه ما را روشن کنید که نکنه در گمراهی هستیم و سایت هامون در خطره !
خوب من یه درخواست ajax میفرستم بعد یه سری اطلاعات از دیتابیس خونده میشه و روی صفحه درج میشه...
حالا ربات نمیتونه این اطلاعات رو برداره؟ یا کوئری رو تغییر بده و خراب کاری کنه!؟

H:Shojaei
دوشنبه 11 خرداد 1394, 12:14 عصر
دوست عزیز من فک میکنم این دوستان ما بیشتر نگران حملات برات فورس مثلا اگه یه فرم لاگین باشه خواهید دید که میشه با روبات به سادگی به اون صفحه که اطلاعاتی میفرستی حمله کرد و ....

خب کپچا خوبه اما بهترین چیز اینه از سیشن استفاده کنی من با استفاده از سیشن عدد رندم دیگه این مشکلو نداشتم
منظورتون توکن هست دیگه؟! خوب توکن که به راحتی هرجا ریخته باشید توی متغیر جاوااسکریپت خونده میشه...

fatima-php
دوشنبه 11 خرداد 1394, 14:50 عصر
در کل همونطور که دوستان گفتن، راه حل قطعی برای جلوگیری از این حملات نیست ولی میشه با ترکیب روشهای مختلف، کار رو برای هکرها سخت کرد. مثلاً توی اکثر حملات، مستقیماً فرم سابمیت میشه و کسی نمیاد یکبار سایت اصلی رو بخونه و بعد صفحه رو بگیره و دوباره بیاد یک درخواست دیگه بسازه و فرم خودش رو با اون مقدار ارسال کنه.

engmmrj
دوشنبه 11 خرداد 1394, 15:14 عصر
خوب من یه درخواست ajax میفرستم بعد یه سری اطلاعات از دیتابیس خونده میشه و روی صفحه درج میشه...
حالا ربات نمیتونه این اطلاعات رو برداره؟ یا کوئری رو تغییر بده و خراب کاری کنه!؟
یکم تخیلی دارید فکر میکنید !
برای تغییر کوئری باید وارد هاست بشه :لبخند: ُ اگر اینجوری که شما میگید باشه پس گوگل ُ فیسبوک .. چیکار میکنن ؟

H:Shojaei
دوشنبه 11 خرداد 1394, 15:27 عصر
یکم تخیلی دارید فکر میکنید !
برای تغییر کوئری باید وارد هاست بشه :لبخند: ُ اگر اینجوری که شما میگید باشه پس گوگل ُ فیسبوک .. چیکار میکنن ؟
نه من منظورم اینجکشن و ازین حرفا بود که هواسم نبود اون موقع، خوب اینجکشن هم که راهو روش خودشو داره!
اوکی جواب سوالمو گرفتم دوستان ممنون...

Unique
سه شنبه 12 خرداد 1394, 02:27 صبح
فرمودین که جواب را گرفتین اما ممکنه کسی این پست را بخونه و بهتره رفع ابهام بشه !


خوب من یه درخواست ajax میفرستم بعد یه سری اطلاعات از دیتابیس خونده میشه و روی صفحه درج میشه...
حالا ربات نمیتونه این اطلاعات رو برداره؟ یا کوئری رو تغییر بده و خراب کاری کنه!؟

خوب برداره ! اگه شما اطلاعات را بدون اینکه Authentication (بررسی کنید کاربر اجازه دسترسی داره یا نه [مثلا login کرده یا نه]) کنید نمایش میدین اهمیتی نداره ajax باشه یا نه !
در مورد query هم طرف دسترسی به اصل کد که نداره ،‌میتونه inject کنه که باید با روش های متداول جلوش را بگیرین.

m.esmaeilzadeh
سه شنبه 12 خرداد 1394, 13:37 عصر
تو فایل php که اطلاعات رو با ajax براش ارسال میکنی ip رو بررسی کن یا یکسری پارامترهای دیگه که مختص سرور خودت باشه که هر نرم افزار دیگه ای نتونه فایل رو استفاده کنه !

H:Shojaei
سه شنبه 12 خرداد 1394, 14:12 عصر
تو فایل php که اطلاعات رو با ajax براش ارسال میکنی ip رو بررسی کن یا یکسری پارامترهای دیگه که مختص سرور خودت باشه که هر نرم افزار دیگه ای نتونه فایل رو استفاده کنه !
یعنی چی پارامتر هایی که مختص سرور خودم باشه!؟ چه پارامتر هایی مختص سرور خودمه؟

Unique
سه شنبه 12 خرداد 1394, 23:52 عصر
و فایل php که اطلاعات رو با ajax براش ارسال میکنی ip رو بررسی کن یا یکسری پارامترهای دیگه که مختص سرور خودت باشه که هر نرم افزار دیگه ای نتونه فایل رو استفاده کنه !

دوست عزیز ip که همون Ip کلاینت هست و ربطی به ip سرور نداره !
نمیدونم چرا متوجه نیستین. اصلا مشکلی وجود نداره که راه حلی براش باشه. مباحث injection و حملات Robotic به فرم ها و CSRF و غیره کلا مباحث دیگه ای هستن. به نظرم مشکل آقای شجاعی مفهومی هست تا تکنیکی.

دانیال دزفولی
چهارشنبه 13 خرداد 1394, 11:06 صبح
گروه ایواک توی فرم هاشون اصلا از کپچا استفاده نمیکنن
ولی کارشون هم خیلی امنه

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

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

under22
چهارشنبه 13 خرداد 1394, 11:20 صبح
گروه ایواک توی فرم هاشون اصلا از کپچا استفاده نمیکنن
ولی کارشون هم خیلی امنه
http://ewalk.ir/

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

همیشه برام سواله که امنیت داره یا نه
شما از کجا میگید کارشون امنه
با بررسی های من اتفاقا خیلی بی امن درست کردن و آبرو خودشونو بردن
این چه وضعه فرم هست
1) csrf نداره
2) کپچا نداره
3) تو dropdown میشه با اینسپکت مقادیرش رو عوض کرد و فرم رو ارسال کرد
4) تو قسمت ایمیل اصلا بررسی نمیشه که ایمیل معتبر هست یا نه
5) تو قسمت های دیگه مثل نام و عنوان راحت میتونست یه regular بنویسه که از ورود محتوا غیر معتبر جلوگیری کنه ولی ننوشته و راحت میشه داخلش کد نوشت
این سایت ساده ترین چیز ها هم پیاده نکرده
جالبه تو نمونه کارشونم زدن بانک پاسارگاد ولی این سایت برای شرکت آرناتک هست
http://arnatech.ir/projects/

اما دوست عزیز H:Shojaei (http://barnamenevis.org/member.php?241637-H-Shojaei) اشتباه میکنید دوستان گفتن تنها راه csrf و نهایتا کپچا هست csrf رو میشه دور زد اما کپچا خوب رو نمیشه .
فرض کنیم ajax شما حاوی یکسری اطلاعات کوئری select باشه خب از بیرون در دسترس باشه اصلا مهم نیست هکر کاری نمیتونه بکنه شما داری اون query رو چاپ میکنی اگه کسی اطلاعات کوئری رو بخاد از صفحه برمیداره . اگه ajax مربوطه به insert باشه باید کمی احتیاط کنی و csrf و در نهایت کپچا بزارید حالا فرض کنیم کپچا نذاشتید csrf گذاشتید به نظرتون برای هکر صرف میکنه کلی وقت بزاره و روباتی بنویسته که بیاد محتویات صفحه رو بخونه و براتون با ajax بفرسته اولا فرض کنیم بفرسته شما باید اولا جلو sql injection و.. رو ببندی و اینکه اگه اینکارو بکنه سرور فایروال داره و تعداد درخواست زیاد تو مدت زمان کم از ip بیاد رو بلاک میکنه .