PDA

View Full Version : سوال: ارسال مقادیر مهم از طریق متد GET



alismith
جمعه 14 مرداد 1390, 12:41 عصر
سلام

فرض کنید مجبورید یک یک یا چند متغییر را که قرار هست از مقادیر آنها استفاده کنید و اطلاعاتی را از database استخراج کنید و حتی مجبور باشید برخلاف منطق GET مقداری در بانک اطلاعاتی را مطابق این متغییر ها update کنید
حالا شما فکر می کنید برای بالا بردن امنیت در چنین سرویسی چی کارهایی می توان انجام داد؟

مثلا فرض کنید که هم مقادیر عددی و هم رشته ارسال می شود
آیا استفاده از توابعی چون md5 یا sha1 را پیشنهاد می کنید، تا اینطوری کسی نتواند مقادیر ارسالی را تغییر دهد ؟ ولی در این روش بازیابی اطلاعات به حالت اول به چه صورت انجام می شود؟

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


با تشکر

MSN_Issue
جمعه 14 مرداد 1390, 15:27 عصر
کلا ارسال اطلاعات مهم با متد GET پیشنهاد نمیشه ... !
اما اگه مجبورید پیشنهاد میکنم خودتون یه تابع هش بنویسید و ازش استفاده کنید ...

alismith
جمعه 14 مرداد 1390, 15:43 عصر
میشه بیشتر راهنمایی کنید

خودتون می تونید یک مثال بزنید؟


با تشکر

eshpilen
جمعه 14 مرداد 1390, 15:47 عصر
در درجهء اول باید ولیدیشن سمت سرور صورت بگیره. یعنی ببینی اون مقداری که ارسال شده جزو مقادیر مجاز و مقادیری که اون کاربر خاص مجاز به ارسال اونها بوده هستن یا نه.
قایم کردن اطلاعات از خود کاربر که معمولا معنا نداره و امنیت کامل هم نمیده.
مثلا کاربر ممکنه بدون اینکه مفهوم پارامترهای شما رو بدونه اونا رو بصورت تصادفی دستکاری کنه یا برابر مقادیری که برای کاربر یا کاربرد و صفحهء دیگه ای دیده بذاره. این برنامهء شماست که باید ولیدیشن کامل سمت سرور داشته باشه و تشخیص بده آیا مقادیر ارسال شده مجاز هستن و اون کاربر سطح دسترسی لازم برای ارسال مقادیر مورد نظر رو داره یا نه.

در این زمینه GET و POST هردو قابل سوء استفاده و خرابکاری هستن. ولی GET راحتتره چون هرکس میتونه بدون هیچ برنامه و کار اضافه ای، پارامترها رو در آدرس بسادگی تغییر بده و تایپ کنه.
فکر نکنید اگر چیزی رو POST کردید به این معنی هست که کاربر نمیتونه اون رو تغییر بده یا اطلاعات دیگری رو ارسال کنه.

البته شاید مورد شما چیز دیگری باشه که در اینصورت باید توضیح بیشتر و دقیقتری بدید یا مثال بزنید تا بررسیش کنیم.

alismith
جمعه 14 مرداد 1390, 16:04 عصر
دوست عزیز ممنون که راهنمایی می کنید

من بیشتر توضیح میدم:

ببینید فکر کنید من مجبورم چندتا لینک در اختیار تمام کاربرها قرار بدم و هیچکاری به عضویت هم ندارم یعنی از login و session هم خبری نیست و قراره این لینکها از یک سایت و صفحه دیگری کلیک بشن
حالا شما فرض کنید من این لینک رو به یک عدد 6 رقمی خلاصه کردم (مثلا)
http://site.com/162223
حالا این روش چندین اشکال داره که من یک تاپیک دیگه هم برای این موضوع درست کردم
1- کاربر به راحتی می تونه مقدار رو تغییر بده
2- می تونه با برنامه یا مثلا javascript بهصورت یک loop هر چند بار بخاد برای این لینک و لینکهای دیگر با عدد مشابه click بفرسته
حالا من می خوام جلوی این کار رو بگیرم

شما چه پیشنهاد می کنید؟

با تشکر

eshpilen
جمعه 14 مرداد 1390, 16:25 عصر
خب این لینک چکار میکنه؟ باعث انجام چه عملیاتی میشه؟ هدف شما چیه؟

alismith
جمعه 14 مرداد 1390, 16:40 عصر
این لینک قراره مطابق با اون شماره صفحه را به یک آدرس دیگری تغییر مسیر دهد و در بانک اطلاعاتی مقداری را افزایش دهد

eshpilen
جمعه 14 مرداد 1390, 16:44 عصر
این لینک قراره مطابق با اون شماره صفحه را به یک آدرس دیگری تغییر مسیر دهد
چه آدرسی مثلا؟ حالا فرضا کاربر عدد رو تغییر بده میره به یه آدرس دیگه، ولی برای چی باید این کار رو بکنه. اگر اون آدرس آدرسی باشه که همهء کاربران بتونن ببینن، پس نیازی نیست محدودش کنیم.


و در بانک اطلاعاتی مقداری را افزایش دهد
چه مقداری؟ مقدار چه اطلاعاتی؟

alismith
جمعه 14 مرداد 1390, 17:05 عصر
ببینید فرض کنید من میخام این لینکها رو به عنوان یک سیستم تبلیغاتی در اختیار کاربرها قرار بدم تا با کلیک بازدید کننده ها هم به آدرس مورد نظر انتقال داده بشند و هم قبل اینکار با ورود به آدرس اولی
htt://site.com/123454
اطلاعات صاحب تبلیغات به روز بشه :

تعداد بازدید
آخرین دفعه بازدید
و...

اما این روش مشکلی که داره اینکه آدرس خیلی واضح هستش و هر کسی می تونه این سیستم رو دور بزنه و چندین کلیک برای این لینکها بفرسته
حالا میخام بدونم که چطوری هم آدرس سایت رو (سایت دوم - سایت تبلیغات دهنده) از دید کاربر مخفی کنم و اگر این روش عددی که من گفتم خوبه چطوری این عدد رو نامفهوم کنم تا کسی نتونه به راحتی به این سیستم نفوذ کنه و کلا چطور دفعات بازدید را محدود کنم که مشکلی کاربران حقیقی نداشته باشند؟

با تشکر

رضا قربانی
جمعه 14 مرداد 1390, 21:53 عصر
کلا ارسال اطلاعات مهم با متد GET پیشنهاد نمیشه ... !
اما اگه مجبورید پیشنهاد میکنم خودتون یه تابع هش بنویسید و ازش استفاده کنید ...
ممنون می شم یه تابع هش که خودتون درست کردید برامون بذارید

alismith
جمعه 14 مرداد 1390, 23:29 عصر
سلام

آقا رضای گل شما خودت پیشنهادی نداری عزیز؟ :چشمک:

MSN_Issue
جمعه 14 مرداد 1390, 23:32 عصر
ممنون می شم یه تابع هش که خودتون درست کردید برامون بذارید
توابع هش با توجه به نوع و مکانی که مورد استفاده قرار میگیرند، میتونند متفاوت باشند (برگشت پذیر یا یک طرفه ... )
مثلا یک تابع هش ساده میتونه اینطوری باشه :


<?php
function h1 ($str, $method){
$res = '';
$time = ''.Date(U);
switch($method){
case 0: $str = $str; break;
case 1: $str = md5($str); break;
case 2: $str = md5(hash(md4, $str)); break;
case 3: $str = md5(substr(md5($str), 10, 20)); break;
}

for($i=0; $i<10; $i++){
$res .= ($str[$i]!=null)?$str[$i]:'';
$res .= $time[$i];
}
return $res;
}

?>

همین طور که می بینید، متد 0 برگشت پذیر، متد 1 تقریبا برگشت پذیر (!) و متد های 2و3 تقریبا یکطرفه هستند ...
بسته به نیازتون میتونید هرطور که خواستید این توابع رو طرحی کنید .

این لینک هم میتونه مفید باشه ... (http://www.manionline.org/1384/02/25/php-password-hash/)

موفق باشید...

alismith
شنبه 15 مرداد 1390, 00:28 صبح
ممنون دوست عزیز

ولی حالا شما فرض کنید من با همین hash مشکل اولم حل شد یعنی کسی نمی تونه لینک رو تغییر بده یا به لینکهای دیگه دسترسی داشته باشه اما برای کنترل تعداد نمایش لینک چه پیشنهادی دارید مثلا گفتم اگه کسی بخاد این لینک رو با برنامه یا اسکریپتی که خودش نوشته به دفعات زیاد کلیک کنه (هر 3ثانیه یکبار) چطوری باید این مشکل رو حل کرد؟ :متفکر:


با تشکر