برگزیده های پرشین تولز

SQL Injection

phpkar

Registered User
تاریخ عضویت
11 آگوست 2005
نوشته‌ها
387
لایک‌ها
0
سن
42
محل سکونت
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 هست و متاسفانه من در موارد پیچیده هیچ اطلاعاتی در این زمینه ندارم ...
آیا کسی اطلاعات کاملتری در این زمینه داره ؟
 

artin

کاربر تازه وارد
تاریخ عضویت
19 می 2004
نوشته‌ها
2,114
لایک‌ها
2
ای ول به چیزی خوبی اشاره کردی ! منم یه کمی سرچ می کنم ببینم چی میشه
 

shankimout

Registered User
تاریخ عضویت
17 می 2004
نوشته‌ها
1,524
لایک‌ها
3
محل سکونت
ساری . . . . . . . . . . . . . . Permanently Bann
بنظر من باید اینارو حذف کنی جون توی متن ها ممکنه دخل و تصرف ایجاد شه . روش های دیگه ای هم برای جلوگیری از اجرا شدن query هست .
 

sama_sally

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

phpkar

Registered User
تاریخ عضویت
11 آگوست 2005
نوشته‌ها
387
لایک‌ها
0
سن
42
محل سکونت
Mashhad
به نقل از sama_sally :
این or رو باید یه کاری کنی نتونه وارد کنه
مثلا تویه فیلدهای مهم اجازه نده فاصله باشه

فاصله رو نمیشه کاریش کرد چون تو هر کلمه و جمله ای هست ...
اصلا اون or هم که من نوشتم اصولی نیست .

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

Parsa_361

کاربر فعال صفحات داینامیک
کاربر فعال
تاریخ عضویت
5 آگوست 2005
نوشته‌ها
889
لایک‌ها
10
محل سکونت
Isfahan, php.ini
به نقل از phpkar :
فاصله رو نمیشه کاریش کرد چون تو هر کلمه و جمله ای هست ...
اصلا اون or هم که من نوشتم اصولی نیست .

کسی از روشهای هک کردن به وسیله sql injection اطلاع داره ؟
معمولا اگر ادم هک کردن رو یاد بگیره ضدهک شدن رو بلد میشه
سؤال سخت میکنی جون تو ! :blink: :D
من یه چیزایی شنیدم ولی زیاد نمی دونم
 

artin

کاربر تازه وارد
تاریخ عضویت
19 می 2004
نوشته‌ها
2,114
لایک‌ها
2

Parsa_361

کاربر فعال صفحات داینامیک
کاربر فعال
تاریخ عضویت
5 آگوست 2005
نوشته‌ها
889
لایک‌ها
10
محل سکونت
Isfahan, php.ini
به نقل از artin :
فهم sql injection به صورت ساده
http://www.acunetix.com/websitesecurity/sql-injection.htm

مقاله نصبتا کامل در مورد حمله ای sql injection و مقابله با آن
http://www.sitepoint.com/article/sql-injection-attacks-safe

اینم واسه phpkar که دنباله مثال بود تو این لینک انواع مثال رو برای این کار گفته
http://www.developerfusion.co.uk/show/4656/1/
دستت درد نکنه آرتین جان با اینکه انگیلیسیم زیاد خوب نیست که این متنا رو بخونم ولی به دردم خورد :D
فقط من یه چیزی رو موندم !
فقط میشه متغیر username و password رو مقدار دهی کرد !
sql رو چی جوری مقدار دهی میکنن ؟
sql یه متغیر global هست و اگه registerglobal روی off باشه هیچ کاری نمی شه کرد
ها ؟ قضیه این چه جوریاست ؟ :D
 

phpkar

Registered User
تاریخ عضویت
11 آگوست 2005
نوشته‌ها
387
لایک‌ها
0
سن
42
محل سکونت
Mashhad
به نقل از artin :
فهم sql injection به صورت ساده
http://www.acunetix.com/websitesecurity/sql-injection.htm

مقاله نصبتا کامل در مورد حمله ای sql injection و مقابله با آن
http://www.sitepoint.com/article/sql-injection-attacks-safe

اینم واسه phpkar که دنباله مثال بود تو این لینک انواع مثال رو برای این کار گفته
http://www.developerfusion.co.uk/show/4656/1/

ایول ... دستت درد نفوکوله
... جالب بود ;)
البته ظاهرا SQL Injection شکل دیگه ای غیر از اون چیزی که فکر میکردم نداره ...
غیر or چیز دیگه هم میتونه باشه ؟
 

Parsa_361

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

artin

کاربر تازه وارد
تاریخ عضویت
19 می 2004
نوشته‌ها
2,114
لایک‌ها
2
به دلیل اهمیتی که این موضوع داشت من این رو دوباره اوردمش بالا

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

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

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

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

shankimout

Registered User
تاریخ عضویت
17 می 2004
نوشته‌ها
1,524
لایک‌ها
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);
          }
      }
 

first saeed

Registered User
تاریخ عضویت
25 آگوست 2005
نوشته‌ها
815
لایک‌ها
2
سن
41
محل سکونت
PubliC_HtmL
سلام

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

artin

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

!'"#$%^&*()=+{}[]|\;?><

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

phpkar

Registered User
تاریخ عضویت
11 آگوست 2005
نوشته‌ها
387
لایک‌ها
0
سن
42
محل سکونت
Mashhad
به نقل از artin :
فکر کنم اگه این کاراکتر ها از تو ورودی پاک بشه دیگه نشه کاری از پیش برد !



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

ببین این hba اطلاعات خفنی در مورد SQL Injection داره ولی نمیدونم چرا با اینکه جاش توی این تاپیک خالیه علاقه ای به کمک به این تاپیک نداره !!!
 

artin

کاربر تازه وارد
تاریخ عضویت
19 می 2004
نوشته‌ها
2,114
لایک‌ها
2
اگه باهاش در تماس هستی بگو یه نگاه به این تاپیک بندازه

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

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

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

shankimout

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

Mehdi

مدیر بازنشسته
تاریخ عضویت
1 آگوست 2004
نوشته‌ها
5,602
لایک‌ها
49
محل سکونت
Anywhere
به نقل از artin :
فکر کنم اگه این کاراکتر ها از تو ورودی پاک بشه دیگه نشه کاری از پیش برد !



چون هر کدی بیاد به یکی از کدهای بالا لازم داره
نه ؟
یعنی اگر اینها از ورودی طرف حدف بشه کد خیلی امن تر میشه
اصليش همين كوات هستش
اگه جلوي بسته شدنشو بگيريد ديگه نميشه كاري كرد
 

phpkar

Registered User
تاریخ عضویت
11 آگوست 2005
نوشته‌ها
387
لایک‌ها
0
سن
42
محل سکونت
Mashhad
به نقل از shankimout :
این تابع رو از vbulletin گرفتم یکم تغیرشم دادم که بشه برای ارایه های دو بعدی هم استفاده کرد. من توی نرم افزار کاری که واسه خودم برای طراحی سایت درست کردم ( dlab-sg ) از این کد و کد هایی نظیر اون استفاده کردم و تمام روش های موجود sql injection که بلد بودم رو تست کردم و جواب گرفتم .

درسته ... من تمام ورودی های سایت رو با همون تابعی که نوشتم چک میکنم ولی ظاهرا علاوه بر SQL Injection یه روشهای خفن تری هم واسه هک کردن هست که ما بی خبریم !
باز هم توصیه میکنم از hba خواهش کنین براتون توضیح بده روشهای هک کردن رو ... توی SQL Injection خداست !
 
بالا