امنیت در برنامه نویسی PHP و شناسایی خطرات امنیتی

دسته بندی: آموزش
زمان مطالعه: ۲ دقیقه
۲۰ شهریور ۱۳۹۳

در جلسه ی امروز در مورد بحث بسیار مهم امنیت در زبان PHP صحبت می کنیم و بیش از 20 نکته ی مهم رو برای رعایت موارد امنیتی و کدنویسی امن به شما توضیح می دیم .

 

موارد مطرح شده در این جلسه عبارتند از :

فصل 16 : امنيت در PHP : شناسايي باگ هاي امنيتي و رفع آن ها

  • چرا و چگونه برنامه هايي ايمن بنويسيم؟
  • شناخت انواع حملات و مشکلات امنيتي، پيشنيازي براي نوشتن برنامه هاي امن
  • دلايل ايجاد ناامني در برنامه هاي PHP و راه حل رفع انها
  • قانون اول ! عدم اعتماد به داده ها کاربران
  • مشکلات در پيکربندي وب سرور
  • مشکلات ناشی از فعال بودن register_globals و نحوه ی غیر فعال سازی آن
  • عدم تنظيم صحيح نحوه ي گزارش خطاها
  • مشکلات موجود به دلیل عدم انتخاب انکودینگ استاندارد
  • ساختار نامناسب برنامه برای لود کردن فایلها
  • عدم استفاده از نام ها و مقادیر پیش فرض
  • حذف فایل های نصب اسکریپت ها پس از اتمام مراحل نصب
  • قابل پیشبینی بودن رفتار ، ساختار و کدهای شما و مشکلات آن
  • غیرفعال سازی و یا استفاده ی صحیح از Powerful Commands ها در php
  • انتخاب نوع و سایز مناسب برای ستون های جداول پایگاه داده
  • پسوردهای ضعیف و مشکلات ناشی از آن
  • خصوصیت های یک  پسورد مطمئن و قوی
  • مشکلات امنيتي مربوط به ديتابيس و تزريق SQL یا SQL Injection
  • مشکلات ناشي از تزريق کد و داده هاي خطرناک (Cross-Site Scripting - XSS)
  • مشکلات ناشي از دزيده شدن Session ها و Cookie ها
  • حملات CSRF و راهکارهاي مقابله با آن
  • کهنه بودن ورژن نرم افزارها و اسکريپت ها
  • استفاده از فریم ورک های معروف برای رفع بسیاری از نگرانی های امنیتی
  • مشکلات موجود در هاست های اشتراکی، تهیه ی هاست از شرکت های معتبر و متخصص
  • آماده ی حمله ی هکرها باشید ! چه مسائلی را باید همیشه رعایت کنم و به یاد داشته باشم؟
  • آشنايي بيشتر با الگوريتم هاي کدگذاري و Hash کردن
:: توجه

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

ثبت نام در آموزش PHP

نویسنده
بیش از 15 سال هست که برنامه نویسی می کنم و از بین همه زبون هایی که کار کردم جاوا، اسمبلی و php رو دوست دارم. دانشجوی دکترای نرم افزارم و توی دانشگاه روی پردازش بیگ دیتا و پردازش موازی کار کردم و عاشق چالش از هر نوعیش هستم! سون لرن مثل بچه منه که 12 سال براش وقت گذاشتم، اینجا همه تلاش می کنیم از شروع یادگیری تا ورود به بازر کار حوزه برنامه نویسی و IT همراهتون باشیم.

جلسات دوره

نظرات کاربران

mahdiyeh

با سلام استاد اوند لطفا ایمیل بنده بررسی نماییدبه این آدرس ایمیل ارسال کردم
avand.loghman@gmail.com

Behdad Khateri

سلام خسته نباشید
گاهی در اخبار گفته میشه که یک فرد کم سن و سال سایتهای دولتی رو هک کرده!!! قطعا سایتهای دولتی امنیت کمی ندارند. آیا لزوما هکر دانش بالایی دارد؟ و استفاده از توابع برای جلوگیری از کد اینجکشن و… در اکثر سایتها رعایت میشون به نظر شما هکر ها معمولا از چه روشهایی استفاده میکنند؟

لقمان آوند

حالا کی گفته امنیت سایتای دولتی زیاده؟ وقتی سایتایی مثل فیسبوک، توییتر و لینکدین بعضا نقصای امنیتی توشون پیدا میشه اینا که سهله!
راه های نفوذ زیاده. کافیه یه نقص امنیتی مستعد حمله پیدا بشه برای هکر و این کافیه تا کارشو انجام بده .

میثم جبارزاده

سلام و خسته نباشید
اگر قرار باشه پسورد بصورت plain text سمت سرور فرستاده بشه امکان شنودش وجود داره چون پروتکل http امن نیست!!!! پس احتمالا کنار هشینگ سمت سرور سمت کاربر هم لازم هست انجام بشه
استاد واقعیتش خیلی دوست داشتم دقیقا کدهای مربوط به امنیت یک سایت آنلاین رو ببینم.
فکر می کنم اون چیزی که تو واقعیت اتفاق می افته بسیار فراتر از اینهاست!!!!
استاد با مطالب گفته شده واقعا امنیت مطلوب رو تامین کردیم؟

لقمان آوند

اگر شنود ارتباط بین کلاینت و سرور هم مهمه براتون می تونید اینکار هم بکنید. ولی در کل هش سمت کلاینت نباید جایگزین سمت سرورش بشه! ولی خوب با هم استفاده کردنش هم می تونه مشکلی که گفتید رفع کنه تا حدودی …
کلا امنیت یه بحث نسبی هست و نمیشه ادعا کرد 100% امنیت وجود داره. ولی میشه به سمت 100% نزدیک و نزدیکتر شد. بله اگر مواردی که گفته شده رعایت کنید می تونید بابت خیلی از نگرانی های امنیتی خیالتون راحت باشه …

میثم جبارزاده

به نظرم موارد گفته شده در خصوص امنیت برای یک سایت آنلاین واقعی کافی نیست.
استاد لطفا اگر امکان داره در خصوص امنیت بیشتر راهنمایی کنید من از قبل با php آشنا بودم و صرفا این بسته آموزشی رو جهت تامین امنیت بیشتر خریداری کردم اما واقعیتش اینه که احساس می کنم سایتی که قراره آنلاین بشه به امنیت خیلی خیلی بالاتری نیاز داشته باشه.
سایت خودتون واقعا به موارد امنیتی گفته شده اکتفا کرده؟؟
باز هم از استاد عزیزم تشکر میکنم امیدوارم بررسی گردد.

لقمان آوند

سلام
مهمترین نکات مورد نیاز امنیتی رو ما ذکر کردیم که اگر رعایت کنید قطعا از لحاظ امنیتی وبسایتتون تا حدود زیادی امن میشه …
البته خیلی مسائل هست که به کدنویسی ممکنه مربوط نشه و در مباحث امنیتی مهم باشه . مثل پیکربندی سرور، آپدیت و رفع باگ های نرم افزاری نصب شده رو سرور و …
کلا مقوله امنیت خیلی گسترده هست. مواردی که گفتیم تقریبا اکثر اون چیزی بود که شما در کدنویسی و استفاده از خود نرم افزار می تونید رعایت کنید.

میثم جبارزاده

با عرض سلام و خسته نباشید؛
می خواستم بدونم اگر از توابع هش سمت کاربر استفاده کردم و در جاوا اسکریپت هش انجام شد اگر کاربر به هر دلیل جاوا اسکریپت فعال نداشت چگونه برخورد کنیم؟ آیا هش سمت کلاینت درست نیست؟

لقمان آوند

بهتره اینکارو سمت سرور انجام بدید. اگه سمت کاربر انجام بدید هم امکان غیرفعال سازیش هست، هم امکان لو رفتن الگوریتم هشتون، هم امکان دستکاری توسط کاربر !

وحید آشوری

سلام
من یک سایت وردپرس ، چند وقت پیش طراحی کرده بودم که متاسفانه اون سایت هک شد . منم برای بررسی علت هک قسمتی از متن هکر رو که در سایت قرار داده بود را در گوگل سرچ کردم . که با تعداد سایت های زیادی رو به رو شدم که توسط اون هکر هک شده بود. بعد از بررسی نتایج جست و جو صفحه ی اول گوگل متوجه شدم که تمامی سایت هایی که در صفحه اول گوگل قرار دارند و هک شده اند مثل من از هاست های ، تهران هاست استفاده می کردند. بنابر این نتیجه گیری که من کردم این بود که مشکل هک شدن از هاست می باشد. و این رو با پشتیبانی هاستینگ در میان گذاشتم که بعد از چند وقت علت هک رو SQL Injection بیان کردن. و خلاصه گفتن به خاطر هاست نیست.
عبارتی که من در گول سرچ کردم و اگر این عبارت سرچ کنید سایت های پیدا شده مشابه سایت هک شده من می باشند.
Mr_BL4cKH3T sheytan azzam
استاد ممنون میشم شما هم نظر تخصصی تون رو در این مورد بدین .

لقمان آوند

سلام
اگر همه هک شده ها از تهران هاست بودند طبیعتا احتمال نفوذ به هاست بیشتر هست. بعید می دونم در نسخه های اخیر وردپرس باگ امنیتی مربوط به sql injection وجود داشته باشه!

sadaf

سلام
شما گفتین فایل هارو از طریق url لود نکنیم.راستش من درست متوجه این حرفتون نشدم.
مثلا وقتی میخوایم صفحه user.php رو باز کنیم نیایم از طریق ادرس get اون صفحه رو بالا نشون بدیم
بیایم برای باز کردن فایل هامون از دستور header استفاده کنیم تا کسی متوجه نشه چه صفحه ای باز شده درسته این حرفم؟
میشه با یک مثال توضیح بدین.
و یک سوال دیگه اینکه میشه لطف کنید یه مکان خوب برای خرید هاست رو معرفی کنید.
تشکر

لقمان آوند

دقیقا متوجه سوالتون نشدم. در کدوم دقیقه از این جلسه در این باره صحبت کردم ؟ بگید که مجدد نگاه کنم و پاسخ بدم …

sadaf

جلسه 20 دقیقه 20
سوال من اینه استاد الان مثلا من روی دکمه تبلیغات از منو که زدم بوسیله تگ a میره به
همین صفحه و توی نوارادرس مرورگر مثلا مینویسه
locallhost:wamp/user/tablighat.php
من میخواستم بدونم این مدل ادرس دهی من که مستقیم اسم فایل رو اوردم اشتباهه؟
چکار کنم که یک آدرس به این صورت بسازه و اسم فایل اصلی نشون داده نشه
https://7learn.com/tutorials/php-class-part20-security/comment-page-1#comment-39307
الان اینجا فکر میکنم فقط اسم پوشه ها اومده
راستش استاد به طور دقیق این قسمت از درس رو متوجه نشدم

لقمان آوند

موردی که اونجا گفتیم ساده هست. گفتیم اسم و آدرس فایل ها رو به عنوان مقدار یه پارامتر get بعد از url سایت یا صفحه دریافت نکنید همون بخشی که بعد از علامت سوال در ویدیو گفتیم و توضیح دادیم. این ربطی به آدرس دهی در تگ a و … نداره.
اون نحوه ی تغیر url که گفتید مربوط به پوشه ها نیست. با استفاده از htacess میشه ساختار url ها رو تغیر داد که بحث این دوره نیست .

Yazda

سلام .. یه سوالی برام پیش اومده. اینکه آیا هش کردن یوزرنیم هم مثل پسورد باعث امنیت بیشتر میشه؟ یا نه تاثیری نداره؟ اصلا کار منطقی هست؟
ندیدم جایی یوزرنیم رو هش کنن. برا همین سوال شد برام.

لقمان آوند

سلام
بله طبیعتا امنیت اطلاعات رو بالا میبره. ولی دردسرش زیاد میشه و به همین کمتر جایی یوزرنیم رو هش می کنن. چون خیلی جاها تو برنامه ها لازم داریم یوزرنیم ها رو بگیریم و یا روشون کوئری بزنیم که اگر هش باشه اذیت میکنه !

لقمان آوند

خیلی خوبه که اینکارو میکنه. بعدها نتیجش رو خواهی دید…
موفق باشی

Massud Tarekhi

این مقاله رو قبلا خونده بودم (جلسه کار با رشته ها) به همراه دو سه تا مقاله دیگه
هر چیزی که شما می گید میرم و سرچ می کنم تا چیز های زیادی یادبگیرم به همین دلیل اینجا زیاد سوال نمی پرسم

لقمان آوند

هش md5 قابل کشف هست با وجود منابع پردازشی قوی
از الگوریتم های قویتر به همراه salt مثل sha256 و … استفاده کن. این مقاله رو هم بخون توضیحات خیلی خوبی داده .

پایان زمان پشتیبانی

دانشجوی گرامی، بازه پشتیبانی فعال برای این دوره ۳ ماه است که برای شما به پایان رسیده است.

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

نیاز به لاگین

برای ارسال دیدگاه و یا پرسیدن سوال خود در این قسمت، باید در سایت لاگین شوید.
گزارش مشکل