PDA

View Full Version : امنیت ارسال متغیر با get_$



lady64
جمعه 21 بهمن 1390, 16:07 عصر
هنگام ارسال متغیر با get_$ چطور میشه برای کد امنیت قائل شد . مثلا داریم :
index.php?id=2
چطور میشه مقدار متغیر ارسالی رو رمز کرد ؟ آیا این به امنیت کمک میکنه ؟
درسته که ارسال با session و post_$ بهتره اما بعضی وقتا لازمه متغیر رو با get ارسال کرد.
دوستی میگفتن نوع ارسال مهم نیست . باید در دریافت از تابع addslashes و ... استفاده کرد.
این رو هم ممنون میشم توضیح بدید.
با تشکر

billgivz
جمعه 21 بهمن 1390, 16:57 عصر
دوست عزیز اگه میشه بیشتر توضیح بدید

اگر منظورتون اینه که اطلاعات رو با این فرمت index.php?id=2 ارسال میکنید به دلیل دیده شدن مقدار امنیت پایین میاد از
RewriteEngine on استفاده کنید

http://www.workingwith.me.uk/articles/scripting/mod_rewrite

MMSHFE
شنبه 22 بهمن 1390, 11:32 صبح
ببینید، بدون اهمیت به اینکه اطلاعات به چه روشی ارسال بشه، نکته اصلی امنیت اینه که به هیچ عنوان به اطلاعاتی که از سمت کاربر میاد اعتماد نکنید و همیشه اونها رو با روشهایی مثل Escape کردن، بررسی نوع داده ها و... چک کنید تا از صحت اونها مطمئن بشین. اگه این اصل رو رعایت کنید، تا حدود زیادی امنیت بالا میره. اینکه گفته میشه امنیت Post از Get بیشتره و... هم فقط بخاطر این هست که اطلاعات محرمانه مثل رمز کاربران و... توی آدرس ذکر نشه که اگه فرضاً یکی کنار فردی که داره لاگین میکنه نشسته باشه، ازطریق آدرس بتونه رمز رو ببینه وگرنه فرق خاصی بینشون نیست. تازه استفاده از Get مزایایی مثل امکان Bookmarkکردن و... رو هم داره. بحث Rewrite هم بیشتر برای SEO بکار میره و آنچنان باعث افزایش امنیت نمیشه چون درهرحال مقداری که باید ارسال بشه توی آدرس دیده میشه (حالا ممکنه بتونیم تغییراتی ایجاد کنیم و مثلاً اینکه مقدار 12345 مربوط به پسورد هست رو طوری بفرستیم که ازطریق آدرس کسی متوجه نشه که این مقدار، پسورد هست ولی درهرحال مقدار یعنی 12345 توی آدرس دیده میشه). مثلاً بجای
mysite.com?pass=12345
بنویسیم:
mysite.com/12345
ولی همونطور که میبینید، توی روش Get همیشه مقادیر توی آدرس دیده میشن.
موفق باشید.

AbiriAmir
شنبه 22 بهمن 1390, 20:29 عصر
بله
بعضی اوقات بسکه کلمه امنیت رو توی وب بکار میبرن ما تازه واردا تنمون میلرزه!
در صورتی که اینطوری نیست
همونطوری که دوستمون فرمودن:

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

به راحتی هر فردی مقادیری رو میتونه از طریق POST بفرسته...
پس امنیت به این صورت نیست...

lady64
سه شنبه 25 بهمن 1390, 09:27 صبح
سلام دوباره.من هم جزئ همون تازه وارد ها هستم.میخوام بدونم در مواقعی که باید از get استفاده کرد، در سمتی که مقدار دریافت میشه دقیقا باید از چه توابعی و به چه صورت برای چک کردن مقادیر استفاده کرد؟
آقایmmshfe گفتند باید نوع داده و صحت اون بررسی بشه.اگه میشه با یه مثال توضیح بدید.ممنون.

anotheruser
سه شنبه 25 بهمن 1390, 10:49 صبح
اینکه گفته میشه امنیت Post از Get بیشتره و... هم فقط بخاطر این هست که اطلاعات محرمانه مثل رمز کاربران و... توی آدرس ذکر نشه که اگه فرضاً یکی کنار فردی که داره لاگین میکنه نشسته باشه، ازطریق آدرس بتونه رمز رو ببینه وگرنه فرق خاصی بینشون نیست. با عرض پوزش از آقای mmshfe من این حرف رو قبول ندارم.چرا که استفاده از متد get برای اینسرت و دیلیت،و آپدیت اطلاعات اصولا روش درستی نیست.برای نمونه این روش مستعد حملات csrf میباشد.

MMSHFE
سه شنبه 25 بهمن 1390, 16:06 عصر
با عرض پوزش از آقای mmshfe من این حرف رو قبول ندارم.چرا که استفاده از متد get برای اینسرت و دیلیت،و آپدیت اطلاعات اصولا روش درستی نیست.برای نمونه این روش مستعد حملات csrf میباشد.
دوست گرامی، صحبت من اینه که Post هم به همین میزان (حالا با اندکی سختی بخاطر نیاز به ساخت فرم) آسیب پذیره و تفاوت اصلی Get و Post در نمایش اطلاعات در URL هست. برای مثال، اگه سایت ما درمقابل حملات CSRF امن نشده باشه و کنترلهای لازم رو بعمل نیاریم، فرقی نمیکنه از روش Get استفاده کنیم یا Post و فقط زحمت هکر در Post یکم بیشتره (فقط یکم).

MMSHFE
سه شنبه 25 بهمن 1390, 16:09 عصر
سلام دوباره.من هم جزئ همون تازه وارد ها هستم.میخوام بدونم در مواقعی که باید از get استفاده کرد، در سمتی که مقدار دریافت میشه دقیقا باید از چه توابعی و به چه صورت برای چک کردن مقادیر استفاده کرد؟
آقایmmshfe گفتند باید نوع داده و صحت اون بررسی بشه.اگه میشه با یه مثال توضیح بدید.ممنون.
ببینید مثلاً اگه قراره یک فیلد id رو بصورت عددی از Get دریافت کنید، این بررسی ها رو روی اون انجام بدین:

$id = isset($_GET['id') && is_numeric($_GET['id']) ? (int) $_GET['id'] : 0;
و توی کدتون از id$ استفاده کنید یا مثلاً اگه قراره نام کاربری رو دریافت کنید و توی کوئریهای دیتابیس از اون استفاده کنید، این بررسی نسبتاً مناسبه:

$user = isset($_GET['user'] ? mysql_real_escape_string($_GET['user']) : '';
و توی دستور SQL خودتون از user$ استفاده کنید. کلاً نباید بدون اعتبارسنجی هیچ اطلاعاتی رو از کاربر بپذیرید. حالا چه روش Get بکار رفته باشه، چه روش Post
موفق باشید.

lady64
سه شنبه 25 بهمن 1390, 19:34 عصر
با عرض پوزش از آقای mmshfe من این حرف رو قبول ندارم.چرا که استفاده از متد get برای اینسرت و دیلیت،و آپدیت اطلاعات اصولا روش درستی نیست.برای نمونه این روش مستعد حملات csrf میباشد.


میخواستم بدونم شما خودتون وقتی یک کئوری از دیتابیس گرفتید و مثلا اطلاعات 10 نفر رو براتون نمایش میده و بعد میخواید با کلیک روی آیکن دیلیت شخصی رو حذف کنید از چی استفاده میکنید ؟ بالاخره جاهایی لازمه از get استفاده بشه و حالا همون طور که آقای mmshfe گفتند باید اعتبارش چک بشه.ممنون میشم راه حل خودتون رو هم بگید . تشکر...:لبخندساده:

anotheruser
سه شنبه 25 بهمن 1390, 19:36 عصر
دوست گرامی، صحبت من اینه که Post هم به همین میزان (حالا با اندکی سختی بخاطر نیاز به ساخت فرم) آسیب پذیره و تفاوت اصلی Get و Post در نمایش اطلاعات در URL هست. برای مثال، اگه سایت ما درمقابل حملات CSRF امن نشده باشه و کنترلهای لازم رو بعمل نیاریم، فرقی نمیکنه از روش Get استفاده کنیم یا Post و فقط زحمت هکر در Post یکم بیشتره (فقط یکم).
ببینید دوست عزیز مساله فقط دیدن یا ندیدن اطلاعات نیست.فرض کنید من در کنترل پنل وبلاگم در این آدرس [lastComments.php/~]کامنت های خودم رو چک میکنم.
حال فرض کنید با زدن دکمه مثلا دکمه ویرایش به این آدرس میرم[lastComments.php?action=edit&id=5&newValue=hello/~].ابعد از این کار اگر من یک کاربر ناشی باشم و قبل از خروج از سایت با کلیک کردن روی لینک سایت یا وبلاگ نظر دهنده به سایت او میرم.حال کافی است،وبسایت مذکور به صورت خودکار من را به صفحه ارجاع دهنده ام برگرداند،اما با تغییر در پارامتر های ارسالی.چه اتفاقی می افتد.البته این فقط یک مثال ساده بود.برای اینکه بگم که دلیل استفاده از متد POST فقط در این نیست که به فرض کسی که پیشم نشسته آن را نبیند.

anotheruser
سه شنبه 25 بهمن 1390, 19:42 عصر
میخواستم بدونم شما خودتون وقتی یک کئوری از دیتابیس گرفتید و مثلا اطلاعات 10 نفر رو براتون نمایش میده و بعد میخواید با کلیک روی آیکن دیلیت شخصی رو حذف کنید از چی استفاده میکنید ؟ بالاخره جاهایی لازمه از get استفاده بشه و حالا همون طور که آقای mmshfe گفتند باید اعتبارش چک بشه.ممنون میشم راه حل خودتون رو هم بگید . تشکر...:لبخندساده:
من هم برای این کار از متد get استفاده میکنم.

anotheruser
سه شنبه 25 بهمن 1390, 19:56 عصر
اضافه کنم البته میشه این کارو با پست هم انجام داد.اما برای راحتی برای معمولا از GET برای دیلیت،برای اینسرت از POST و برای ادیت از ترکیب این دو استفاده میشه.اما حرف من سر استفاده از این و آن نبود.

lady64
دوشنبه 01 اسفند 1390, 07:39 صبح
دوست عزیز اگه میشه بیشتر توضیح بدید

اگر منظورتون اینه که اطلاعات رو با این فرمت index.php?id=2 ارسال میکنید به دلیل دیده شدن مقدار امنیت پایین میاد از
RewriteEngine on استفاده کنید

http://www.workingwith.me.uk/articles/scripting/mod_rewrite

لطفا طریقه استفاده از RewriteEngine on رو بگید.یعنی باعث میشه مقدار ارسالی با get دیده نشه ؟ زبانم در حد معمولیه .ممنون میشم توضیح بدید

MMSHFE
دوشنبه 01 اسفند 1390, 14:57 عصر
RewriteEngine on باعث میشه موتور ریرایت روشن بشه. بدون این دستور نمیتونید از ریرایت استفاده کنید. ضمناً باز هم تأکید میکنم مقدار ارسالی با Get همیشه دیده میشه. حالا میشه عنوانش رو مخفی کرد ولی مقدار رو نمیشه کاری بکنیم. موفق باشید.