برنامه نويسي امن

دمتون گرم ايناكه روشهاي هك كردنه خيلي باش حالكرديم البته اينم بگما خيلي بدرد ضد هك هم ميخوره جالبه كه تا حالا اصلا بشون توجه نميكرديم
دم همگيتون گرم
 

oxygenws

Active Member
Re: md5 !!!!

ariyahost گفت:
يه راه خوب :

اگر شما يه كاري مثل اين بكنيد :

SELECT * FROM `pws_users` WHERE 1 AND `user_userpass` = md5('test'); AND ...

منظورم اينه كه اين رو اجرا كنيد.اونوقت چطور ؟
:wink:

باز هم احتمال خطر می باشد. مسلما رشتهء test از ورودی خونده می شه که خودش می تونه شامل کاراکترهایی مثل ( و ´ باشه، نه؟؟ و این خودت خطر سازه.
 

sirvan

Member
مرسی از آموزشهایتان
من خواستم به عنوان یه هکر از اونا استفاده کنم!!:wink:
خیلی از سایتها رو امتحان کردم و مثل اینکه همه میدونستن!!
تویه اون سایتها این یکی خیلی قرص و قایم گرفته بود-->
https://66.98.134.81:19638/webhost/...dmin?ocw_login_domain=iranelika.com/login.php

یه سوال :
بعضی وقتها مخصوصا موقع سرچ کردن سایتها ارور میدن (همین مجیدآنلاین خودمون مخصوصا) آیا اونا هم باگ و ضعف امنیتی محسوب میشن؟
و یا موقع لاگین این پیغام خطا رو میدن:[align=left:2e3ec133a3]
کد:
Warning: main(includes/asfunc.php): failed to open stream: No such file or directory in /home/esteghla/public_html/mainfile2.php on line 2
[/align:2e3ec133a3]
در حالی که من از وجود mainfile2.php بی اطلاع بودم.
 

oxygenws

Active Member
دوست عزیز، این آدرسی که شما دادی و احتمالا اکثر آدرس هایی که تست کردی، برنامه هایی تجاری و حرفه ای هستند که مسلما یک زمانی چندیدن باگ مختلف امنیتی روشون بوده و الان رفع شده (و البته شاید باز هم باشه) و مطمئن باش به این راحتی نمی تونی وارد این سیستم ها بشی.

در مورد سوالت هم آدرس (URL) رو بده و بگو چه چیزی وارد کردی تا دلیلش رو بگم :)
 

NabiKAZ

Well-Known Member
سلام
روشهاي شما در مورد phpnuke كه سورس باز است و همه تقريبا به سوراخ هاي اون آشنان شايد صدق بكنه .
اما مثلا اگر كد ها رو كسي خودش بنويسه و php خودش بنويسه ... يه هكر چطور ميدونه كه فرضا اسم متغيير يوزر من يا متغيير مربوط به پسور چيه ... يه اسم كوئري ديتا بيسم چيه .. كه بخواد از روش هاي ذكر شده در صفهات قبل استفاده كنه !!!

لطفا توضيح بديد ممنون ميشم .
نبي
 

oxygenws

Active Member
مثلا در سیستمی مثل phpnuke یا phpbb (تاکید می کنم شبیه این سیستم ها) نام کاربری مشخص نیست؟؟؟

چندین وقت پیش سایت دوست یابی ای بود که این مشل رو داشت و کافی بود دوست مورد نظر خودتون رو پیدا کنید :) در بالای همون صفحه اطلاعات طرف از جمله نام کاربری اش رو هم نوشته بود. سپس اون رو در فرم مربوطه بنویسید و با یک تزریق ساده به راحتی وارد مشخصات طرف می شدید و می تونستید اونها رو تغییر بدید.

بله، ‌بسیاری از سایت ها درست طراحی شده اند یا اطلاعات نام کاربری در دسترس عموم نیست مثل همین اورکات. البته باز این احتمال هست که شما بتونید با همین تزریق سیکوئل نام کاربری افراد رو هم در بیارید. :)

خلاصه، اگه هک کردن فقط به همین ۴-۵ روش ساده ای که ما اینجا گفتیم محدود بود، همه هکر می شدند :) لطف کنید یه حالی بدید و فقط به خوندن این مطالب بسنده نکنید، کمی فکر کنید و خلاق باشید :) (فقط قربون دستتون، وقتی خلاق شدید، به من و سایتم کاری نداشته بشید :) )

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

sarallah

Member
آقا نبي همين بالاي سرت رو نگاه كن ( نوار آدرس رو ميگم ) در اين جا يه متغيير داريم به نام t كه مقدارش هم 12137 هستش و يه متغيير داريم به نام start كه مقدارش 36 هست ...
بعضي از متغيير ها رو به اين روش ميشه فهميد چيه ٬ البته اگه انتقال اطلاعات به روش get باشه
اگر هم post باشه از سورس صفحه ميشه يه چيزهايي در آورد ...

اما اگه برنامه درست نوشته شده باشه شناختن متغيير ها هم به درد شما نميخوره ...
 

zfarhad2003

Member
خوب من اصلا اين تاپيك رو نديده بودم واقعا دستتون درد نكنه مطالب جالبي رو عنوان كرديم كلي چيز ياد گرفتيم.
در صفحات قبل توي يك قسمت مجيد جان استفاده از Session هارو پيشنهاد كرده بود كه من توي چند جاي ديگه خونده بودم كه بهتره توي سرورهاي اشتراكي هيچ وقت از session براي ذخيره داده استفاده نشه چون ممكنه افراد ديگه روي سرور سو استفاده كنن.
مي‌شه در اين مورد يكم توضيح بدين؟؟؟؟؟؟؟؟؟؟؟
 

oxygenws

Active Member
احتمالا اونجا فقط از بین کوکی و سشن توصیه شده که با سشن کار بشه :)

امن ترین حالت اینه که یک سرور خصوصی بگیرید :)
 

behdadkh

New Member
ممنون بخاطر اين تاپيك خوب

در رابطه با session ها موافقم اصولا هر چقدر سعي كنيم اطلاعاتي كه استفاده امنيتي دارند رو از روي كلاينت به روي سرور منتقل كنيم خيلي بهتره و كمتر احتمال خطر ميره .
در مورد session ها بنظرم بهتره كه هندلينگ سشن ها رو خودمون بعهده بگيريم تا php ,
مثلا با استفاده از MySql شايد اينطوري امن تر باشه .
 

behdadkh

New Member
متونيد چند تاش رو معرفي كنيد ؟

من يه سيستم سشن هندلينگ بر اساس DB نوشتم و درست هم كار ميكنه ولي خيلي دوست دارم مدلهاي ديگر رو هم ببينم
مرسي
 

oxygenws

Active Member
تو سایت phpclasses.org (فکر کنم آدرس این بود) بگرد، کلاس های خوبی داره.
 

WEBRAMZ

New Member
oxygenws گفت:
omidak گفت:
سلام:
راهي كه PHPBB در نظر گرفته برایه مقابله با SQL Injection اینه که میاد هرچی ' هست به : /'
تبدیل میکن
یعنی:
کد:
'Select * From Users Where Username ="' . str_replace("\\'", "''", $username) . '"...'
این کار جلویه هر Injection ای رو میگیره.
اما بهترین راه استفاده از Parameter ها هست که دیگه دیگه هیچ دسترسی وجود نداره. :wink:

امیدک جان، این کار جلوی هر تزریقی رو نمی گیره....
اون کاری که phpbb کرده به شرطی جلوی تزریق رو می گیره که کسی که کد می زنه بفهمه که چطوری داره کد می زنه!!! منظورم اینه که اون دستور به شرطی درست کار می کنه که طرف تمامی توابع mysql_query اش رو با ' درست کرده باشه!! در حالی که خود من بسته به نیازم و مکان خاص توی کد هام یا ممکنه از ' استفاده کنم یا " :)
مهم اینه که اون توابعی که من گفتم، جلوی تمامی تزریق های سیکویل رو می گیره، مهم نیست طرف نویسنده اش کی باشه :)

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

براي حل اين مشكل ميتوان از تابع addslashes در php كرد كه كليه كاراكترهاي ' , " , blank رو با بک اسلش \ همراه ميكنه...

البته استفاده از این addslashes زماني توصيه ميشود كه آپشن magic_quotes_gpc در php.ini ست نشده باشه( البته بطور پيش فرض فعال است).

در حالتي كه magic_quotes_gpc فعال باشد تمامي وروديها از طريق POST , GET , COOKIE بطور اتوماتیک در صورت داشتن ' , " , NULL با بك اسلش همراه ميشوند...
 

WEBRAMZ

New Member
Majid گفت:

علاوه بر اين بهتر است که هميشه تمام error ها را نمايش دهيم.

کد:
error_reporting(E_ALL);



بدين صورت هر گاه شما متغيري را صدا کنيد که از قبل تعريف نشده پيغام خطايي دريافت خواهيد کرد.


مجيد


بر عكس بهتر است هميشه در هنگام اجرا خطاها را پنهان سازيد و تنها در هنگام debug اسكرپت خطاها را نمايش دهيد.

در اينحالت كسي نميتواند به اطلاعات داخلي اسكرپت و همچنين نام كاربري شما در دايركتوري /home دسترسي پيدا كند...
 

WEBRAMZ

New Member
Majid گفت:
روش: Cookie و SESSION به جاي متغير


راه حل دوم اين است که username و password را در cookie بريزيم و هر دفعه با بررسي آن از تطابق آن با پسورد اصلي مطمئن شويم. همچنين با مقايسه آن مي توانيم تعيين کنيم که آيا کاربر admin است يا يک کاربر معمولي. با استفاده از دو تابع اين کار ميسر است. يکي آنکه صحت username و password وارد شده را تشخيص دهد و ديگري آنکه تعيين کند آيا اين داده ها مربوط به admin هستند يا کاربر.
فرض کنيد اين دو تابع را validate_login و is_admin بناميم. بنابراين :
کد:
if (!validate_login($_COOKIE['username'], $_COOKIE['password'] ) ) 
{ 
echo "Sorry, invalid login"; 
exit; 
} 
// اطلاعات کاربر صحيح است ، ادامه برنامه 
if (!is_admin($_COOKIE['username'] )) 
{ 
echo "Sorry, you do not have access to this section"; 
exit; 
}



( من به خاطر کارآيي بيشتر session به شخصه راه حل اول را توصيه مي کنم )


مجيد

بدترين راه حل استفاده از كوكي بصورت ذخيره نام كاربري و رمز عبور آن هم بصورت Plain Text در كوكي جهت چك كردن در اسكريپت است.

بهترين حالت تركيبي از SESSION و COOKIE است به اينصورت كه پس از ايجاد سشن SID را در COOKIE و ديتابيس ذخيره كنيد و در هربار كه نياز بود فقط چك كنيد آيا سشني با SID مورد نظر بر روي سرور ثبت گرديده يانه؟ و بطور سختگيرانه ميتوانيد IP كاربر را در ديتابيس ثبت كرده و هربار IP كاربر و SID را با مقادير ديتابيس چك كنيد. البته بايد در نظر داشته باشيد كه ركوردهاي قبل از مثلا 2 ساعت پيش تا بحال را هر بار از ديتابيس حذف نماييد.
 

arashdanger

Member
آیا امکان دیدن سورس صفحات پی اچ پی وجود داره؟

سلام مطالب خیلی خوبی طرح شد و من خیلی استفاده کردم ولی میخواستم بدونم اصلا راهی برای دیدن سورس PHPصفحات وجود داره؟ مثلا میشه کاری کرد که سرور یه فایل PHP رو کامپایل نکنه و بصورت یه فایل تکست به کاربر بفرسته ؟
اگر چنین امکانی وجود نداشته باشه با یه خورده دقت تو برنامه نویسی میشه جلوی اکثر حملات رو گرفت ولی اگر امکان دیدن سورس وجود داشته باشه هیچوقت نمیشه مطمئن بود که برنامه هیچ باگی نداره مثلا همین PHPNUKE با اینهمه کاربر بازم یه سری باگ داره که راه حملات رو باز گذاشته
از یه طرف هم مرام open source گلومونو فشار میده و آدمو مجبور میکنه سورسه برنامه ها رو به همه بدیم!!!
من قبلا تو یه سایت هک دیده بودم که یه برنامه خیلی مهم واسه هکرها وجود داره که اسمش Nmap که امکانات زیادی داره و علاوه بر همه کارهایی که میکنه میتونه سورس صفحات سایتهای دینامیک رو هم به هکر بده من که ازش سر در نیاوردم لینکش رو اینجا میزارم اگه کسی سر در آورد به ما هم بگه!!!
Nmap win
 

oxygenws

Active Member
بهترين حالت تركيبي از SESSION و COOKIE است به اينصورت كه پس از ايجاد سشن SID را در COOKIE و ديتابيس ذخيره كنيد
البته session ذاتا از کوکی استفاده می کنه و لازم نیست دوباره SID رو توی کوکی ذخیره کنید.

میخواستم بدونم اصلا راهی برای دیدن سورس PHPصفحات وجود داره؟
نگاه کن، فرض کن php با آپاچی اجرا می شه.... اگر آپاچی مشکل امنیتی داشته باشه، این امکان هست که cracker ها بتونند محتویات فایل php رو ببینند. یا اینکه مثلا کرکر بیاد سرور رو کرک کنه یا ... ولی به طور معمول و بدون هیچ حفره ای یک کرکر نمی تونه محتویات فایل php رو ببینه.

برنامه nmap نمی تونه سورس رو بده :) نگران نباش.

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

جدیدترین ارسال ها

بالا