آژانس هواپیماییexchanging

SQL Injection

شروع موضوع توسط phpkar ‏14 ژانویه 2006 در انجمن PHP

  1. phpkar

    phpkar Registered User

    تاریخ عضویت:
    ‏11 آگوست 2005
    نوشته ها:
    388
    تشکر شده:
    0
    محل سکونت:
    Mashhad
    سلام دوستان

    همه میدونیم که SQL Injection یکی از روشهای هک شدن سایتهاست و برنامه نویس باید شدیدا روی اون توجه داشته باشه .... همونجور که از اسمش هم پیداس یعنی تزریق یک کد SQL در داخل یک Query ...
    من راه حلهایی که به ذهن خودم تابحال رسیده رو میگم ... کسایی هم که در این زمینه اطلاعات وتجارب مفیدی دارند بگند تا همه استفاده کنند .

    1- فرق گذاشتن بین مقادیر GET و POST و Session و ...
    2- نوشتن تابعی مثل injection_replace ( دوستان لطفا نظر بدند و اگه اشکال داره اصلاحش کنن ) :

    PHP:
    function injection_replace($txtobject){
        
    $txtobject1=strtolower($txtobject);
        
    str_replace("'","&#39",$txtobject );
        
    str_replace("'","&#39",$txtobject );
        
    str_replace("<","&#60",$txtobject );
        
    str_replace(">","&#62",$txtobject );
        
    str_replace("or","",$txtobject );
        
    str_replace("delete","",$txtobject );
        
    str_replace("update","",$txtobject );
        
    str_replace("insert","",$txtobject );
        return 
    $txtobject;
    }
    3- موقع add کردن user در database در Cpanel همه privilage ها رو به user ندین . معمولا DROP و Delete خطرناکه و برای user معمولی نباید امکان داشته باشه ...

    و اما Sql Injection چه راههایی داره ؟
    یکیش اینه که توی فرمهایی مثل Login بیان مثلا به جای admin وارد کنن ' or username='admin'
    این ساده ترین نوع injection هست و متاسفانه من در موارد پیچیده هیچ اطلاعاتی در این زمینه ندارم ...
    آیا کسی اطلاعات کاملتری در این زمینه داره ؟
     
  2. artin

    artin کاربر تازه وارد

    تاریخ عضویت:
    ‏19 می 2004
    نوشته ها:
    2,112
    تشکر شده:
    2
    ای ول به چیزی خوبی اشاره کردی ! منم یه کمی سرچ می کنم ببینم چی میشه
     
  3. shankimout

    shankimout Registered User

    تاریخ عضویت:
    ‏17 می 2004
    نوشته ها:
    1,491
    تشکر شده:
    3
    محل سکونت:
    ساری . . . . . . . . . . . . . . Permanently Bann
    بنظر من باید اینارو حذف کنی جون توی متن ها ممکنه دخل و تصرف ایجاد شه . روش های دیگه ای هم برای جلوگیری از اجرا شدن query هست .
     
  4. sama_sally

    sama_sally Registered User

    تاریخ عضویت:
    ‏5 آپریل 2005
    نوشته ها:
    2,598
    تشکر شده:
    1
    محل سکونت:
    Essen, Deutschland
    این or رو باید یه کاری کنی نتونه وارد کنه
    مثلا تویه فیلدهای مهم اجازه نده فاصله باشه
     
  5. phpkar

    phpkar Registered User

    تاریخ عضویت:
    ‏11 آگوست 2005
    نوشته ها:
    388
    تشکر شده:
    0
    محل سکونت:
    Mashhad
    فاصله رو نمیشه کاریش کرد چون تو هر کلمه و جمله ای هست ...
    اصلا اون or هم که من نوشتم اصولی نیست .

    کسی از روشهای هک کردن به وسیله sql injection اطلاع داره ؟
    معمولا اگر ادم هک کردن رو یاد بگیره ضدهک شدن رو بلد میشه
     
  6. Parsa_361

    Parsa_361 کاربر فعال صفحات داینامیک کاربر فعال

    تاریخ عضویت:
    ‏5 آگوست 2005
    نوشته ها:
    889
    تشکر شده:
    10
    محل سکونت:
    Isfahan, php.ini
    سؤال سخت میکنی جون تو ! :blink: :D
    من یه چیزایی شنیدم ولی زیاد نمی دونم
     
  7. appbannerkhuniresbanner
  8. artin

    artin کاربر تازه وارد

    تاریخ عضویت:
    ‏19 می 2004
    نوشته ها:
    2,112
    تشکر شده:
    2
  9. Parsa_361

    Parsa_361 کاربر فعال صفحات داینامیک کاربر فعال

    تاریخ عضویت:
    ‏5 آگوست 2005
    نوشته ها:
    889
    تشکر شده:
    10
    محل سکونت:
    Isfahan, php.ini
    دستت درد نکنه آرتین جان با اینکه انگیلیسیم زیاد خوب نیست که این متنا رو بخونم ولی به دردم خورد :D
    فقط من یه چیزی رو موندم !
    فقط میشه متغیر username و password رو مقدار دهی کرد !
    sql رو چی جوری مقدار دهی میکنن ؟
    sql یه متغیر global هست و اگه registerglobal روی off باشه هیچ کاری نمی شه کرد
    ها ؟ قضیه این چه جوریاست ؟ :D
     
  10. phpkar

    phpkar Registered User

    تاریخ عضویت:
    ‏11 آگوست 2005
    نوشته ها:
    388
    تشکر شده:
    0
    محل سکونت:
    Mashhad
    ایول ... دستت درد نفوکوله
    ... جالب بود ;)
    البته ظاهرا SQL Injection شکل دیگه ای غیر از اون چیزی که فکر میکردم نداره ...
    غیر or چیز دیگه هم میتونه باشه ؟
     
  11. Parsa_361

    Parsa_361 کاربر فعال صفحات داینامیک کاربر فعال

    تاریخ عضویت:
    ‏5 آگوست 2005
    نوشته ها:
    889
    تشکر شده:
    10
    محل سکونت:
    Isfahan, php.ini
    آقا کسی جواب ما رو نمیده ؟ :blink:
    :D
     
  12. artin

    artin کاربر تازه وارد

    تاریخ عضویت:
    ‏19 می 2004
    نوشته ها:
    2,112
    تشکر شده:
    2
    به دلیل اهمیتی که این موضوع داشت من این رو دوباره اوردمش بالا

    phpkar اون funtioni که نوشتی میشه گفت که جلو کاملا sql injection رو میگیره ؟

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

    اگر کسی تجربه ای در این مورد دارد بگه

    Parsa_361
    جواب سئوالت رو نمی دونستم که جواب ندادم
    البته اصلا متوجه نشدم منظورت چی بوده
     
  13. shankimout

    shankimout Registered User

    تاریخ عضویت:
    ‏17 می 2004
    نوشته ها:
    1,491
    تشکر شده:
    3
    محل سکونت:
    ساری . . . . . . . . . . . . . . Permanently Bann
    من برای جلوگیری از sql injection از این کد همیشه استفاده می کنم

    PHP:
         function spc_filter($text)
         {
              
    // this is a version of input filter that still allows unicode to function correctly and array varibles
              
    if(is_array($text)){
              foreach(
    $text as $key => $value){
                   
    $text[$key] = strip_tags(preg_replace('/&(?!#[0-9]+;)/si''&amp;'$value)); // translates all non-unicode entities
                   
    $text[$key] = str_replace(array('<''>''"'), array('&lt;''&gt;''&quot;'), $value);
              }
              return 
    $text;
              }
              else
              {
              
    $text strip_tags(preg_replace('/&(?!#[0-9]+;)/si''&amp;'$text));
              return 
    str_replace(array('<''>''"'), array('&lt;''&gt;''&quot;'), $text);
              }
          }
     
  14. avajang.com .leftavajang.com.right
  15. shankimout

    shankimout Registered User

    تاریخ عضویت:
    ‏17 می 2004
    نوشته ها:
    1,491
    تشکر شده:
    3
    محل سکونت:
    ساری . . . . . . . . . . . . . . Permanently Bann
    خیلی روش های دیگه ای هست . ایشالا یکم سرم خلوت تر شد یه تاپیک باز میکنم کلی فانکشن پر کاربردمیزارم
     
  16. first saeed

    first saeed Registered User

    تاریخ عضویت:
    ‏25 آگوست 2005
    نوشته ها:
    813
    تشکر شده:
    2
    محل سکونت:
    PubliC_HtmL
    سلام

    اون كتاب php hacks كه من تو تاپيك "يك پيشنهاد و دوسه تا كتاب " براي دانلود گذاشتم مطالب خوبي در اين زمينه ها داره
    اينم لينك دانلودش : http://www.yaddashtha.com/ebook
     
  17. artin

    artin کاربر تازه وارد

    تاریخ عضویت:
    ‏19 می 2004
    نوشته ها:
    2,112
    تشکر شده:
    2
    فکر کنم اگه این کاراکتر ها از تو ورودی پاک بشه دیگه نشه کاری از پیش برد !

    چون هر کدی بیاد به یکی از کدهای بالا لازم داره
    نه ؟
    یعنی اگر اینها از ورودی طرف حدف بشه کد خیلی امن تر میشه
     
  18. phpkar

    phpkar Registered User

    تاریخ عضویت:
    ‏11 آگوست 2005
    نوشته ها:
    388
    تشکر شده:
    0
    محل سکونت:
    Mashhad
    ببین این hba اطلاعات خفنی در مورد SQL Injection داره ولی نمیدونم چرا با اینکه جاش توی این تاپیک خالیه علاقه ای به کمک به این تاپیک نداره !!!
     
  19. artin

    artin کاربر تازه وارد

    تاریخ عضویت:
    ‏19 می 2004
    نوشته ها:
    2,112
    تشکر شده:
    2
    اگه باهاش در تماس هستی بگو یه نگاه به این تاپیک بندازه

    به نظره خودت اون کاراکترهای که من گفتم پاک بشه باز جای نفوذ هست ؟

    یه جیز تو مایه های funtion خودت ولی کامل تر

    فعلا هر چیزی که برای injection استفاده می شه دیدم حداقل یکی از اون کاراکترها رو مصرف می کنه البته شاید چیزه دیگه ای هم باشه و من نمی دونم !
     
  20. shankimout

    shankimout Registered User

    تاریخ عضویت:
    ‏17 می 2004
    نوشته ها:
    1,491
    تشکر شده:
    3
    محل سکونت:
    ساری . . . . . . . . . . . . . . Permanently Bann
    این تابع رو از vbulletin گرفتم یکم تغیرشم دادم که بشه برای ارایه های دو بعدی هم استفاده کرد. من توی نرم افزار کاری که واسه خودم برای طراحی سایت درست کردم ( dlab-sg ) از این کد و کد هایی نظیر اون استفاده کردم و تمام روش های موجود sql injection که بلد بودم رو تست کردم و جواب گرفتم .
     
  21. Mehdi

    Mehdi مدیر بازنشسته

    تاریخ عضویت:
    ‏1 آگوست 2004
    نوشته ها:
    5,569
    تشکر شده:
    49
    محل سکونت:
    Anywhere
    اصليش همين كوات هستش
    اگه جلوي بسته شدنشو بگيريد ديگه نميشه كاري كرد
     
  22. phpkar

    phpkar Registered User

    تاریخ عضویت:
    ‏11 آگوست 2005
    نوشته ها:
    388
    تشکر شده:
    0
    محل سکونت:
    Mashhad
    درسته ... من تمام ورودی های سایت رو با همون تابعی که نوشتم چک میکنم ولی ظاهرا علاوه بر SQL Injection یه روشهای خفن تری هم واسه هک کردن هست که ما بی خبریم !
    باز هم توصیه میکنم از hba خواهش کنین براتون توضیح بده روشهای هک کردن رو ... توی SQL Injection خداست !