واضح آرشیو وب فارسی:سایت ریسک: arash_black07-04-2008, 12:26 AMدوستان سلام، ميدونيد كه يكي از نكات امنيتي در php استفاده از encode,decode هست كه براي تطبيق اطلاعات با پايگاه داده از اين تكنيك استفاده ميشه ، مي خواستم بدونم كدوم يك از دوستان اطلاعات بيشتري در اين زمينه داره و مي تونه اين تكنيك رو با مثال آموزش بده ؟؟؟ neopersia07-04-2008, 10:37 AMencode و decode برای تطبیق با پایگاه داده ها!؟ میشه بیشتر توضیح بدی dogtag07-04-2008, 01:06 PMبا اجازه ي اساتيد، من يه مختصري مي گم. شايد مفيد باشه. ببينيد مثلاً شما يه پسورد رو مي گيري و مي ذاري توي ديتابيس خب اگر encode نكني هر كس كه به DB دسترسي داره مي تونه بياد و پسورد رو بخونه ولي ميان encode مي كنند كه به دو صورته: 1- برگشت پذير مثل base64 2- برگشت نا پذير مثل md 5 كه البته امنيت md 5 خيلي بيشتره و مياد هر چي كه بهش مي دي با به الگوريتم خاص تبديل مي كنه به يه كد 32 حرفي مثل اين "HFEUSSIEHFSI4E7HTE87THTJ4E8 U87T" و حر وقت كه بخواي ببيتي پسورد وارد شده همين هست يا نه اول md 5ش رو مي گيري و با اين مقايسه مي كني اون base64 هم قابل برگشته. من اين رو بيشتر براي تبديل كاراكتر هاي بي خود به حروف از اين استفاده مي كنم براي كاراكتر هايي مثل : يا در تر از اون كاراكتر 0 (منظورم chr(0) ه نه 0) مثلاً "http : // wefwef . con" رو مي كنه "ahhkfkwk+fk043/fko349" حالا اين هم يه مثال: <?php $string = "salam"; print "BASE64: " . base64_encode($string) . "<br>"; print "MD 5: " . md 5($string) . "<br>"; print "decoded: " . base64_decode(base64_encode($string)) . "<br>"; ?> arash_black07-04-2008, 01:38 PMدوست عزيز از بابت توضيحاتت خيلي ممنونم، حالا به نظر تو استفاده از اين روش مي تونه بهترين روش براي تامين امنيت صفحات login باشه ، منظورم اينه كه چون خطرات SQL Enjection وجود داره اين روش مي تونه بهترين روش باشه ؟ dogtag07-04-2008, 02:11 PMنه اين جلوي injection رو نمي تونه بگيره براي اون بايد از scape (الان دقيقاً جلوم نيست. شك دارم) استفاده كني arash_black07-04-2008, 04:23 PMنه اين جلوي injection رو نمي تونه بگيره براي اون بايد از scape (الان دقيقاً جلوم نيست. شك دارم) استفاده كني فرض كن در يك ديتا بيس username و password كاربران رو به صورت encode يا md 5 وارد كرديم ، حالا در صفحه login يك user و pass از كاربر مي گيريم و پس از encode يا md 5 كردن اون با پايگاه داده تطبيق ميديم ، در اينصورت اگر كاربر حملات SQL ENJECTION وارد كنه ، دستوراتش به شكل md 5 در مياد ، بنابراين از اين حملا ت جلوگيري ميشه ، اگر نظرت خلاف اين هست لطف ميكني بيشتر توضيح بدي ؟ MAXXX07-04-2008, 07:07 PMبین شما یه سو تفاهم شده عمل اینجکشن کشف پسورد هایه کاربران نیست !!! که با هش شدن پسورد ها ازش جلوگیری بشه شما فرض کن پسورد هارو هم هش کردی در دیتابیس یه فروشگاه هکری نفوذ میکنه و شماره و پسورد هایه کارت هایه اعتباری رو میدزده ولی چون پسورد یوزر ها هش شده بوده نمیتونه از پسورد و یوزرنیم کاربرا استفاده کنه حالا به نظر شما از حملش جلو گیری شده؟ وقتی که رمز کارت اعتباری رو داره دیگه پسورد و یوزر کاربری میخواد چیکار dogtag07-04-2008, 07:20 PMآرش جان تازه فهميدم چي ميگي آره عزيز اگه شما هر چيزي كه از كاربر مي گيري رو encode كني ديگه عملاً SQL Injection انجام نميشه ولي ايني كه MAXXX هم ميگه درسته يعني اگر يه جور ديگه وارد بشه مي تونه همه كار بكنه ولي من توصيه مي كنم كه انجامش بدي. خوبه! neopersia07-04-2008, 07:55 PMدرسته شاید بشه با انکود کردن همه داده ها جلوی حملات رو گرفت ولی منابع سیستم رو هدر میده چون هم سیستم باید انرژی بزاره اطلاعات رو انکود و دکود کنه و هم اینکه معمولاً حجم داده های انکود شده بیشتر از داده های معمولی هست و فضا و انرژی بیشتری از سرور دیتابیس میگیره هر داده ای رو لازم نیست انکود کنیم و تو دیتابیس ذخیره کنم بهتره از این کار برای مواقع خاص استفاده بشه مثلاً همون کلمه عبور رو هش کنیم کافیه با md 5 یا sha 1 و روشهای مشابه اینها که قابل برگشت نباشه برای داده های معمولی روشهای ساده تری هست مثلاً stripslashes که البته باید با دقت استفاده بشه چون ممکنه اگه داده های escape شده رو دوباره escape کنیم خطر اینجکشن هنوز هم وجود داره و فقط کار خودمونو خنثی کردیم برای موتورهای دیتابیس مختلف هم توابع مختلفی وجود داره که داده ها رو اسکیپ میکنه مثلاً mysql_real_escape برای mysql یا sqlite_escape_string برای SQLite که بهتره از اونا برای آماده سازی اطلاعات برای قرار گرفتم تو کوئری ها استفاده کنیم برای اطلاعات بیشتر در مورد این توابع میتونید به manual خود php مراجعه کنید که توضیحات خوبی داده arash_black08-04-2008, 02:32 AMدوستان عزيز از جواب هاي خيلي كاملتون ممنونم خوب اين بحث از اهميت خيلي زيادي برخورداره چون ممكنه حاصل همه تلاش هاي برنامه نويس در عرض چند لحظه به باد بره و اصلا كل ديتابيس در يك چشم به هم زدن از بين بره ، خوب ايده من اين بود كه تمام درگاههاي ورود به يك سيستم ، كه با كاربر تعامل دارند و با دريافت مقادير از كاربر اون رو به صفحات شخصي هدايت مي كنند بايد از امنيت زيادي برخوردار باشند و به نظر من ، اگر بشه راه SQL INJECTION رو بست اونوقت ديكه ميشه ادعا كرد كه سيستم از امنيت خوبي برخورداره. با توجه به اينكه در اين حملات از دستورات مشخصي استفاده ميشه و اينكه اين دستورات رو جناب هكر عموما در text box ها تايپ ميكنه ، راه هاي خيلي زيادي براي اين حملات گفته شده مثل : محدود كردن سايز text box يا استفاده از توابعي كه كاراكترهاي خطرناك مثل " يا / رو حذف ميكنند يا encode كردن مقاديري از ديتا بيس كه قراره مورد تطبيق قرار بگيرن و ... كه البته همشون مطلق نيستند . با توجه به اطلاعات محدود خودم ، به نظر ميزسه كه استفاده از رمز گذاري روش مناسبيه ، اما حالا كه بحث داره به جاي خوبي ميرسه ، مي خوام از شما خواهش كنم كه ايده هاتون رو براي ايمن كردن سيستم و جلوگيري از حملات احتمالي بيان كنيد تا بيشتر بحث كنيم . ممنون dogtag08-04-2008, 08:42 AMفكر كنم توي سايت irphp يا يه همچين چيز هايي يه سري مقاله راجع بهش بود وقت كنم پيدا مي كنم برات سایت ما را در گوگل محبوب کنید با کلیک روی دکمه ای که در سمت چپ این منو با عنوان +1 قرار داده شده شما به این سایت مهر تأیید میزنید و به دوستانتان در صفحه جستجوی گوگل دیدن این سایت را پیشنهاد میکنید که این امر خود باعث افزایش رتبه سایت در گوگل میشود
این صفحه را در گوگل محبوب کنید
[ارسال شده از: سایت ریسک]
[مشاهده در: www.ri3k.eu]
[تعداد بازديد از اين مطلب: 604]