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

oonja

New Member
تشکر

با سلام و تشکر از مطالب آموزنده و کامل شما.

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


www.oonja.com
انواع مقالات - دسته بندی وب ها - تالار گفتگوی قدرتمند و
هــرآنــچـه شما می خــواهـیـد.
 
سيسرا گفت:
تا حالا هرچي گفته شد مستقيما مربوط به كد نويسي بود.
اگه ممكنه يه مقداري راجع به راههاي ديگه كه ممكنه ريسك پذير باشن توضيح بديد.
براي آپلود كننده ها (بخصوص عكس) كه در پورتال ها خيلي خيلي لازم و پر كار برده چه مسائلي امنيتي ممكنه مطرح باشه؟ چه اقداماتي لازمه؟ راهي وجود نداره كه بدون استفاده از پرميشن 777 آپلود انجام بشه؟

مدتهاست براي من اين سؤال هست كه چجوري مي شه به فايلها يا پوشه هاي 777 حمله كرد. اصلا از جانب پرميشن هاي آزاد 777 ممكنه خطري باشه. اگه آره چه خطرايي، اگه نه، چرا؟ مگه ما دسترسي نوشتن، خواندن و اجرا رو براي user,group,world آزاد نذاشتيم؟


بدون پاسخ؟
 

NabiKAZ

Well-Known Member
سلام
داشتم این مقاله رو میخوندم :
http://www.dev.ir/articles/show.asp?id=21

نوشته :
در اينجا يكي از خصيصه هاي امنيتي Escapeshellcmd( ) اينست كه كاربران بدجنس نمي
توانند دستورات mysql را وارد فيلد ها بكنند و از آن طريق اطلاعات شما را بگيرند
.اگر شما همه جزئيات آن را بخواهيد ، مي توانيد در راهنماي دستي آن نگاه كنيد .

به نظرم جالب اومد ، تو php.net هم دربارش گفته:
escapeshellcmd() escapes any characters in a string that might be used to trick a shell command into executing arbitrary commands. This function should be used to make sure that any data coming from user input is escaped before this data is passed to the exec() or system() functions, or to the backtick operator.

حالا یه پسر خوب بیاد به زبون مادریمون موضوع رو بشکافه ، ببینیم داستان از چه قراره .

تشکر
نبی
 

msnasiri

Member
در مورد دوستمون که گفته بود چطوری از لیست شدن فایلها جلوگیری کنم باید بگم که می تونی یه فایل با نام .htaccess داخل اون پوشه بسازی و مقادیر زیر رو داخلش بذاری
البته از خود cpanel هم می تونی که ناگفته نماند که اونم همین کارو می کنه
کد:
DirectoryIndex index.php
Options -Indexes

در مورد پرمیشن هم یه سوال از php کاران و هاستینگ ها
من قبلاً با یه هاست کار می کردم که اگه می خواستم فایل بسازم و یا کپی کنم و ... باید پرمیشن رو به 777 تبدیل می کردم
ولی با هاستی که الان کار می کنم دیگه نیازی به این کار نیست.
برعکس من پرمیشن رو به 777 تبدیل کردم و سایت خراب شد
با مسئول دیتاسنتر که صحبت می کردم گفت به cpanel می گم
بعداً آف گذاشت که از پرمیشن بوده و درستش کرده
می خواستم اگه کسی اطلاعات دیگه داره هم بگه تا ما هم استفاده کنیم
که آیا این به تنظیمات PHP ربط دارده )php.ini) یا اینکه تنظیمات سرور

و یه سوال که برام مهمتره
من خواستم با curl بیام به blogfa لوگین کنم
مرحله اول که تایید نام کاربری و رمز عبور هست با موفقیت سپری می شه ولی باسه صفحه بعد با اینکه کوکی های ایجاد شده در صفحه اول رو براش می فرستم باز نمی کنه و می خواد که دوباره به صفحه لوگین برگرده
من اینو باسه هک نمی خوام اصلاً هکر هم نیستم ولی برام جالب و مهمه که از چه روشی استفاده کردن؟
خودمون باسه تشخیص معمولاً از sesion استفاده می کنیم داخل asp.net از چی استفاده می کنن؟
چون من در پرتکل HTTP چیزی به اسم session ندیدم

امیدوارم مسئولین سایت و انجمن بخوان جواب بدن (اینو به این خاطر می گم که جواب بعضی سوالات داده نشده و فقط همون اولای بحث حسابی پی گیری شده) که بشه گفت مجید آنلاین یه تالار تخصصی هست
نه اینکه ما چندتا چیز که دیگه تکراری شده رو دوباره بازگو کنیم
 

oxygenws

Active Member
در مورد پرمیشن هم یه سوال از php کاران و هاستینگ ها
من قبلاً با یه هاست کار می کردم که اگه می خواستم فایل بسازم و یا کپی کنم و ... باید پرمیشن رو به 777 تبدیل می کردم
ولی با هاستی که الان کار می کنم دیگه نیازی به این کار نیست.
برعکس من پرمیشن رو به 777 تبدیل کردم و سایت خراب شد
با مسئول دیتاسنتر که صحبت می کردم گفت به cpanel می گم
بعداً آف گذاشت که از پرمیشن بوده و درستش کرده
می خواستم اگه کسی اطلاعات دیگه داره هم بگه تا ما هم استفاده کنیم
که آیا این به تنظیمات PHP ربط دارده )php.ini) یا اینکه تنظیمات سرور
اگر یک خروجی از صفحه phpinfo بهم بدی، احتمالا می تونم بهت بگم...
اگر خواستی بهم PM بده.

به سوال آخرت که برات مهم تره، جواب نمی دم چون هیچ ربطی به این تاپیک نداره!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 

msnasiri

Member
کی می گه ربط نداره
می گم بلاگفا چکار کرده که نمی شه
این مگه به امنیت ربط نداره؟

و باشه اگه به اینجا ربط نداره کجا باید بپرسم؟
 

oxygenws

Active Member
اگر با php و curl نوشتی، تو انجمن PHP.
اینی که شما پرسیدی ربطی به امنیت نداره و باگی است که شما در برنامه تون دارید. :)
 

msnasiri

Member
دست شما درد نکنه که جواب دادید
درست می گید برنامه من باگ داره
ولی خب مسلماً اون سایت هم از یه روش استفاده کرده که نمی شه براحتی بازش کرد
البته شاید من خراب کار می کنم
به هر حال دست شما درد نکنه
اونو داخل تالار php نوشتم http://forum.majidonline.com/showthread.php?p=416325

اونجا منتظرم
 

Mds

Active Member
این نوع ارسال Query امن هست یا نه؟

با تشکر از تاپیک خوبتون
یه سوال داشتم ، من کوئری هام رو به صورت زیر میفرستم

PHP:
$query = "SELECT * FROM config WHERE ( config_name='sitename' )";
$result = mysql_query($query ,$link) or die ("<B>" . __FILE__ . "<br /> Line " .  __LINE__  . "</B>" . " : " . mysql_error() );

یعنی اگر خطایی در ارسال کوئری رخ بده سریعا برنامه قطع شده و خطا را اعلام میکند.
میخواستم ببینم این کار از نظر امنیتی مشکلی دارد یا نه؟
 

oxygenws

Active Member
هر نوع ارسال اطلاعات از برنامه نوشته شده به خارج، می تونه برای کرکر اطلاعات مهمی باشه.... حتی ساختار و اسم فایل ها و شاخه ها و ... بهتره تا جایی که میشه این اتفاق نیافته.
 
  • Like
Reactions: Mds

NabiKAZ

Well-Known Member
با تشکر از تاپیک خوبتون
یه سوال داشتم ، من کوئری هام رو به صورت زیر میفرستم

PHP:
$query = "SELECT * FROM config WHERE ( config_name='sitename' )";
$result = mysql_query($query ,$link) or die ("<B>" . __FILE__ . "<br /> Line " .  __LINE__  . "</B>" . " : " . mysql_error() );

یعنی اگر خطایی در ارسال کوئری رخ بده سریعا برنامه قطع شده و خطا را اعلام میکند.
میخواستم ببینم این کار از نظر امنیتی مشکلی دارد یا نه؟

این شبیه کاریه که تو phpnuke هم انجام میشه. البته اون چون خودش اپن سورسه خیلی مهم نیست .
ولی هیچ دلیلی نداره کاربر از خطای برنامه نویس مطلع بشه !
نظر من اینه که بجای اینکه دقیقا به شماره و نوع خطا اشاره کنی ؛ یه پیغام ساختگی به خروجی بفرستی و یا حتی از شماره های دلخواه و مشخص استفاده کنی که اون شماره ها فقط برای خودت معنی داشته باشه ، اون وقت انتهای پیام ذکر کنی که با مدیر تماس بگیرید. اینجوری اگر هم یه وقتی کاربر با خطایی مواجه شد، میتونه شماره یا پیغام خطا رو برای شما ایمیل کنه و شما میتونید اون رو پیگیری کنید و فقط شما متوجه میشید خطای شماره فلان یعنی منظور اشکال در کدوم سطر برنامه است.
یا حتی خطاهای رخ داده احتمالی رو در فایلی بنویسی که فقط شما بهش دسترسی داشته باشید. یعنی یه چیزی مثل error log

این یک پیشنهاد بود
تشکر
نبی
 
  • Like
Reactions: Mds

PHP_Empire

Member
این شبیه کاریه که تو phpnuke هم انجام میشه. البته اون چون خودش اپن سورسه خیلی مهم نیست .
ولی هیچ دلیلی نداره کاربر از خطای برنامه نویس مطلع بشه !
نظر من اینه که بجای اینکه دقیقا به شماره و نوع خطا اشاره کنی ؛ یه پیغام ساختگی به خروجی بفرستی و یا حتی از شماره های دلخواه و مشخص استفاده کنی که اون شماره ها فقط برای خودت معنی داشته باشه ، اون وقت انتهای پیام ذکر کنی که با مدیر تماس بگیرید. اینجوری اگر هم یه وقتی کاربر با خطایی مواجه شد، میتونه شماره یا پیغام خطا رو برای شما ایمیل کنه و شما میتونید اون رو پیگیری کنید و فقط شما متوجه میشید خطای شماره فلان یعنی منظور اشکال در کدوم سطر برنامه است.
یا حتی خطاهای رخ داده احتمالی رو در فایلی بنویسی که فقط شما بهش دسترسی داشته باشید. یعنی یه چیزی مثل error log
من دقیقا همین کاره نبی جان رو انجام میدم . خیلی جالب و مفید بوده تو این مدت واسم :)
 

bahar_1

New Member
سلام :
ممنون . مطالبتون برام خیلی جالب بود .
در مورد روش sql injection اگه متغییر ی رو که قراره پسورد رو داخلش بریزیم md5 بکنیم ، دیگه در مورد پسورد دچار مشکل نمی شیم . ولی این مسئله هنوز برای خیلی از ورودی ها مثل ورودی جستجو ، وجود داره .
یکی از مواردی هم که جهت امنیت مهمه ، اینه که نذاریم کسی اگه اسم صفحه هامونو می دونه بدون عبور از صفحه login به اونا برسه .
به طور مثال اگه اسم یکی از صفحه هامون insert است ، ممکنه هکر بدونه ، که ما صفحه ای به این اسم داریم و با زدن آدرس این صفحه به این صفحه راه پیدا کنه .

راه حل : استفاده از session
 

Mds

Active Member
سلام بچه ها
یه سوال داشتم.
من برای سایتم یه کنترل پنل برای آپلود فایل و پاک کردن فایل روی سرور طراحی کردم ( با PHP )
اما فقط وقتی می تونم با این رابط فایل آپلود کنم که Permission فولدر مقصد 777 باشه ( یعنی هم خواندنی و هم نوشتنی برای همه )

حالا می خواستم ببینم که آیا
این کار از نظر امنیتی یه اشتباه بزرگ هست یا نه ؟
اسکریپت ها ی من عیب و ایراد دارن یا نه ؟
 
وجود فولدر با permission 777 بر روی سروری كه به طور اشتراكی استفاده میشه و phpseexec بر روی آن نصب نیست یعنی یك ریسك بزرگ.
اگر phpsuexec بر روی سرو شما نصب نباشه PHP با user nobody بر روی سرور كار میكنه كه همین امر باعث میشه كه فقط بتونه با فولدرهایی با permission 777 عمل نوشتن رو انجام بده و همونطور كه میدونید 777 یعنی همه میتونند بر روی این فولدر بنویسند و همه میتونند از داخل این فولدر app اجرا كنند.
حالا وضعیتی رو در نظر بگیرید كه این سرور یه سرور اشتراكی باشه ... كافیه یكی از كاربران به هر طریقی اكانتش هك بشه ، هكر به راحتی میتونه به این فولدر دسترسی داشته باشه .........

دوست عزیز اسكریپت شما مشكلی نداره بلكه این سرور شماست كه باید امن بشه
 

NabiKAZ

Well-Known Member
وجود فولدر با permission 777 بر روی سروری كه به طور اشتراكی استفاده میشه و phpseexec بر روی آن نصب نیست یعنی یك ریسك بزرگ.
اگر phpsuexec بر روی سرو شما نصب نباشه PHP با user nobody بر روی سرور كار میكنه كه همین امر باعث میشه كه فقط بتونه با فولدرهایی با permission 777 عمل نوشتن رو انجام بده و همونطور كه میدونید 777 یعنی همه میتونند بر روی این فولدر بنویسند و همه میتونند از داخل این فولدر app اجرا كنند.
حالا وضعیتی رو در نظر بگیرید كه این سرور یه سرور اشتراكی باشه ... كافیه یكی از كاربران به هر طریقی اكانتش هك بشه ، هكر به راحتی میتونه به این فولدر دسترسی داشته باشه .........

دوست عزیز اسكریپت شما مشكلی نداره بلكه این سرور شماست كه باید امن بشه
تشکر.
البته ایشون اشاره نکردند که آیا phpsuexec نصب است یا خیر. این رو به این دلیل عرض کردم چون در پایان اشاره کردید باید سرور امن بشه...

حالا یه مطلب دیگه، آیا suphp هم همون کار رو انجام میده ؟ در غیر این صورت تفاوت suphp و phpsuexec در چیه و کدوم رو پیشنهاد میکنید؟

تشکر
 
بله suphp هم همان کار را انجام میده البته phpsuexec علاوه بر اجرای اسکریپت تحت نام کاربر و حل مشکل ownership کاربر رو مجبور میکنه که permission اسکریپت رو روی 777 قرار نده به عبارت بهتر اگر phpsuexec فعال باشد سرور فایل های با permission 777 را اجرا نمی کند در صورتیکه تا اونجا که من دیدم (فقط help و faq و ِdocumentation suphp رو خوندم) suphp کاری با permission نداره و براش فرقی نمی کنه.
یک مطلب دیگه که بهتر بود اول بهش اشاره میکردم اینه که در صورتیکه phpsuexec نصب نباشه باز هم میتونید بر روی سرورهای اشتراکی مشکل هک شدن یک اکانت و دسترسی به فایلهای اکانتهای دیگر رو با نصب mod_openbasedir حل کنید.
 

damavandieh

New Member
دوستان خوب تاپيك جالبي زده شده ايشالا در اولين فرصت تمام تجربياتم يكجا تو همين تاپيك مينويسم اما دوتا چيز خيلي مهم اولين اينكه اگه مي خواين يك كدنويس ماهر پي اچ پي يا اي اس پي بشين حتما چندتا كتاب هك بخونين


بابا اي ول ما منتظريم
راستي ميشه چند تا از اين كتاب ها نام ببريد

در مورد كتاب هم من شخصا كتاب ها و نوشته هاي اي دي اسكوديس رو پيشنهاد مي كنم ترجمه روان اين كتاب توسط موسسه سيمرغ و گروه مهندسي ساحر صورت گرفته قيمتش هم اگه اشتباه نكنم الان حدود چهارهزار تومن كه خوب بهتر از كتابخونه اي چيزي بگيرين و بخونينش

نفوذ در PHP، نویسنده امیر حسین استخریان، لینک فصلهای کتاب:
http://estakhrian.blogfa.com/
http://estakhrian.blogfa.com/cat-5.aspx
 

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

بالا