PDA

View Full Version : سوال: داده های کاربر در چه صورت باعث آسیب رسوندن به وب سایت می شن؟



idocsidocs
شنبه 19 فروردین 1391, 11:25 صبح
من ورودی زیر رو از فرم می گیرم و توی یه متغیر قرار می دم، اگر مقداری که کاربر وارد کرده یه مقدار مخرب باشه، آیا این کد می تونه باعث آسیب رسانی یا هک سایت بشه؟



if($_POST['user_date']!=''){
$user=$_POST['user_date'];
echo $user;
}
exit;

idocsidocs
شنبه 19 فروردین 1391, 12:25 عصر
تا اونجا که من دیدم بله این کد شما راحت با Sql Injection میشه به سایت نفوذ کرد و شما میتونی از تابع mysql_real_escape_string میتونی این مقادیر رو خنثی کنی...


من این کد رو برای دیتابیس نمی فرستم و فقط اون رو توی متغیر ذخیره می کنم و نمایش می دم. چرا این کد باعث Sql Injection می شه؟

persian-boy
شنبه 19 فروردین 1391, 12:57 عصر
چون میتونه با یک کد جاوا ، کوکی های کاربری که این صفحه رو مشاهده میکنه رو بدزده

idocsidocs
شنبه 19 فروردین 1391, 13:16 عصر
چون میتونه با یک کد جاوا ، کوکی های کاربری که این صفحه رو مشاهده میکنه رو بدزده


فقط محدود به XSS هست یا می تونه باعث sql injection، حذف فایلهای موجود در سرور و .. بشه؟

djsaeedkhan
شنبه 19 فروردین 1391, 15:36 عصر
سلام
چون شما مستقیم داری اطلاعات کاربر رو نمایش میدی مثل اینه که در خونه رو باز بگذاری. ممکنه 1000 نفر رد بشن و کاریش نداشته باشن ولی یکی بیاد یه کد تست کنه و غیر از مسایل داده ای فایل های پی اچ پی شما رو بدزده.
من وقتی سایت طراحی می کنم یه تابع می نویسم و تمام مقادیری که از طرف کاربر به سایت وارد میشه رو به اون تابع می فرستم و مقدار بازگشتی رو در خود متغیر میریزم.
مثلا یه مشکل داشتم که اگر کاربر در متن خودش ویرگول میزاشت بعضی کد ها کار نمی کرد. توی تابع که نتونه وارد کنه و .....
نصیحت نیست؛ پیشنهاد: هیچوقت هیچ اطلاعاتی رو بدون فیلتر کردن از کاربر قبول نکن حتی اگر تک رقمی باشه

idocsidocs
شنبه 19 فروردین 1391, 16:04 عصر
این فقط یه نمونه کد بود. منظورم این بود که اگر دیتا رو از فیلتر عبور ندیم و فقط نمایش بدیم هکر می تونه به فایلها و دیتابیس موجود در سرور آسیب برسونه؟

mtchabok
شنبه 19 فروردین 1391, 16:20 عصر
سلام
اگه منظورتون از نمایش دیتا استفاده از echo باشه . باید بگم که هیچ مشکل امنیتی برای سایت بوجود نمیآد بلکه مشکل امنیتی برای کاربران وجود داره و شاید کاربری کدهای جاوا اسکریپت و یا frame و خیلی چیزای دیگه رو وارد کنه که اونوقت هدف فقط خود کاربران هستن و هیچ اتفافی برای امنیت هاستتون نمی افته .

persian-boy
شنبه 19 فروردین 1391, 19:03 عصر
بله تو این مورد فقط XSS صورت میگیره

idocsidocs
شنبه 19 فروردین 1391, 20:23 عصر
بله تو این مورد فقط XSS صورت میگیره


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

Unique
شنبه 19 فروردین 1391, 21:30 عصر
دوستان شما دچار یک اشتباه هستین ! مسئله اینتقدر ها هم پیچیده نیست ، SQL Injection به معنی اینه که کاربر با دستکاری رشته ای (در مثال شما اون متغیره) که شما به یک Query میفرستین تغییری در ساختار یا اطلاعات Database شما ایجاد کنه پس وقتی Query در کار نباشه خبری هم از Sql Injection نیست ، XSS هم زمانی اتفاق میفته که شما بدون فیلتر کردن اطلاعاتی که کاربر میفرسته (اطلاعاتی که نمایش داده میشه قابلیت تبدیل شدن به تگ های HTML و کد جاوا اسکریپت نداشته باشند) در Database ذخیره کنی و به کاربرای دیگتون نشون بدین که در این حالت اتفاقی برای شما نمیفته ولی برای کاربران مشکلاتی پیش میتونه بیاره ! حالا جلوی اینها را بگیر تا سایت امنی داشته باشی !

Beginner2013
شنبه 19 فروردین 1391, 21:47 عصر
تایید میشه،همونطور که دوستان هم گفتن فقط XSS ممکنه،اما شما باید احتیاط کنید چون این میتونه مقدمه ای برای نفوذ بیش تر باشه.چیزایی که به نظر ما بی فایدن برا هکرا ممکنه اونقدرام بی فایده نباشن.البته من خودم هک بلد نیستم اما با توجه به مقالات زیادی که در این زمینه خوندم احتیاط رو شرط عقل می دونم.

idocsidocs
شنبه 19 فروردین 1391, 21:50 عصر
دوستان شما دچار یک اشتباه هستین ! مسئله اینتقدر ها هم پیچیده نیست ، SQL Injection به معنی اینه که کاربر با دستکاری رشته ای (در مثال شما اون متغیره) که شما به یک Query میفرستین تغییری در ساختار یا اطلاعات Database شما ایجاد کنه پس وقتی Query در کار نباشه خبری هم از Sql Injection نیست
برای این گفته منبع معتبری دارید؟

persian-boy
شنبه 19 فروردین 1391, 22:24 عصر
در این کد شما فقط میشه از طریق جاوا اسکریپت ضربه زد که اونم به کلاینت میخوره و جاوا اسکریپت هیچ دسترسی به سرور نداره .
فقط XSS

idocsidocs
شنبه 19 فروردین 1391, 23:45 عصر
این کد چطور؟


if(!empty($_POST)){
header('location: '.$_POSST['user_date']);
}
exit();

eshpilen
یک شنبه 20 فروردین 1391, 09:12 صبح
بقیه دوستان که گفتن می شه فایلهای سرور رو هک کرد یا دیتابیس رو آیب رسوند، مطلب درستی گفتن؟
اگر اطلاعات احراز هویت کوکی خود ادمین که لاگین هست توسط XSS به دست هکر برسه اونوقت ممکنه سرور رو هم هک کنه!!

idocsidocs
یک شنبه 20 فروردین 1391, 11:01 صبح
دوستان توی کد زیر یه لینک از کاربر می گیریم و کاربر رو به اون لینک ریدایرکت می کنیم، توی این کد هیچ خروجی تولید نمی شه و فقط کاربر ریدایرکت می شه.

اگر کاربر داده های مخرب توی فرم وارد کنه آیا کد زی می تونه باعث آسیب دیدن دیتابیس یا فایلهای کاربر بشه:

if(!empty($_POST)){
header('location: '.$_POSST['user_date']);
}
exit();
کسی این موارد رو تست کرده؟

Unique
یک شنبه 20 فروردین 1391, 13:38 عصر
دوستان توی کد زیر یه لینک از کاربر می گیریم و کاربر رو به اون لینک ریدایرکت می کنیم، توی این کد هیچ خروجی تولید نمی شه و فقط کاربر ریدایرکت می شه.
دوست عزیز شما چرا مسائل را میخوای تجربه کنی ! خودتون میگین از کاربر Link میگیرین ! خوب باید با یک تابع چک کنی ببینی این رشته ای که کاربر داده یک URL هست یا نه !


برای این گفته منبع معتبری دارید؟
برای SQL Injection که خودش داره داد میزنه "SQL" یعنی وقتی Query در کار نیست پس Injection ی هم در کار نیست !

idocsidocs
یک شنبه 20 فروردین 1391, 14:33 عصر
برای SQL Injection که خودش داره داد میزنه "SQL" یعنی وقتی Query در کار نیست پس Injection ی هم در کار نیست !
اگر توی داده کاربر سینگل یا دابل کوتیشن بود، می شه دستورات اسکریپت موجود در سرور رو دور زد و بعد از اون دستوراتی که توی داده کاربر وارد شدن اجرا بشن و به سایت آسیب برسونن. آیا این کار امکان پذیر هست؟

Unique
پنج شنبه 24 فروردین 1391, 23:32 عصر
اگر توی داده کاربر سینگل یا دابل کوتیشن بود، می شه دستورات اسکریپت موجود در سرور رو دور زد و بعد از اون دستوراتی که توی داده کاربر وارد شدن اجرا بشن و به سایت آسیب برسونن.
شما جواب من را نمیخونین ! وقتی شما از رشته ارسالی اصلا توی هیچ Query استفاده نکنی که SQL Injection اتفاق نمیفته ! حالا Quote یا Double Quote داشته باشه یا نه !

idocsidocs
جمعه 25 فروردین 1391, 00:12 صبح
شما جواب من را نمیخونین ! وقتی شما از رشته ارسالی اصلا توی هیچ Query استفاده نکنی که SQL Injection اتفاق نمیفته ! حالا Quote یا Double Quote داشته باشه یا نه !
آخه دستورات پی اچ پی رو می شه با قرار دادن ;" یا ;' دور زد و بعد کدهای مخرب رو وارد کرد. مسئله اینه که ممکنه توی رشته ورودی این کاراکترها تزریق بشن و بعد از این کاراکترها کدهای مخرب قرار بگیرن.

اگر یه ورودی به این صورت باشه، امکان داره که کدها دور زده بشن یا نه؟

لطفا این تاپک رو هم جوب بدید (http://barnamenevis.org/showthread.php?336241-%D8%B3%D8%A7%D8%AE%D8%AA%D9%86-%D8%AC%D8%AF%D8%A7%D9%88%D9%84-%D8%AF%D8%A7%DB%8C%D9%86%D8%A7%D9%85%DB%8C%DA%A9-%D8%A8%D8%B1%D8%A7%DB%8C-%D8%AF%D8%B1%D8%AC-%D9%85%D8%B4%D8%AE%D8%B5%D8%A7%D8%AA-%D9%85%D8%AD%D8%B5%D9%88%D9%84%D8%A7%D8%AA)

hassanzanjani1374
جمعه 25 فروردین 1391, 08:59 صبح
دوستان بی زحمت یه توضیح راجب فیلتر کردن اطلاعات ورودی کاربر بدید . چون هم می خوام چاپ کنم و هم می خوام بفرستم به دیتابیس .

mohamadali1374
جمعه 25 فروردین 1391, 09:11 صبح
مثلا کد ها رو ببین:
$User = str_replace("'", "", $User);
این کد اطلاعات موجود در متفیر یوزر رو چک می کنه وازداخل اون کارکتر' رو حذف میکنه
یا کد
$Pass = htmlspecialchars($Pass); اجازه وارد کردن کد اچ تی ام ال رو به این متغیر نمیده

وحالا با وارد کردن این کد هرچی کارکتر مثل';&و..... رو حذف می کنه:

$Username = preg_replace("([^a-z0-9_]*)", '', $Username);