با سلام خدمت کاربران گرامی سایت پی وی لرن و کاربرانی که دوره آموزش codeigniter را دنبال می کنند. در جلسه قبل با مسئله بین المللی سازی در فریم ورک codeigniter و افزودن زبان مورد نیاز خود به آن آشنا شدید. در این جلسه که آخرین جلسه از دوره آموزش codeigniter است؛ آموزش امنیت در codeigniter تقدیم شما می شود.
در مبحث آموزش امنیت در codeigniter چندین روش پیش گیرنده یا روش های پیشگیری از حملات مخرب وجود دارد. در ادامه آموزش امنیت در codeigniter شما را با این روش ها آشنا خواهیم کرد.
XSS به معنای اسکریپت متقابل سایت است. CodeIgniter با امنیت فیلتر XSS همراه است.
این فیلتر هر گونه کد جاوا اسکریپت مخرب یا هر چیزی دیگر که تلاش میکند از کوکی ها ربوده شده و فعالیتهای مخرب به امنیت سایت شما آسیب برساند جلوگیری می کند.
برای فیلتر کردن داده ها از طریق فیلتر XSS، از روش()xss_clean به شکل زیر استفاده کنید.
1 | $data = $this->security->xss_clean($data); |
بهتر است از این عملکرد فقط هنگام ارسال داده استفاده نمایید.
دومین پارامتر اختیاری Boolean می تواند برای بررسی فایل های تصویری در هنگام حملات XSS مورد استفاده قرار گیرد.
این کار موجب سهولت آپلود فایل می شود.
اگر مقدار تعیین شده درست باشد؛در آن صورت عکس ایمن و بی خطر است و اگر این مقدار درست نباشد؛ عکس مشکل امنیتی در بارگذاری دارد.
اضافه شدن SQL یک نوع حمله به پایگاه داده محسوب می شود.
در PHP برای دفع این جمله از تابع و سایر تکنیک های مشابه آن استفاده می شود.
در codeigniter برای تأمین امنیت از توابع داخلی و کتابخانه ها آن استفاده می شود.
می توان در codeigniter به سه روش از ورود و حمله SQL جلوگیری کرد:
1 2 3 4 5 6 | <?php $username = $this->input->post('username'); $query = 'SELECT * FROM subscribers_tbl WHERE user_name = '. $this->db->escape($email); $this->db->query($query); ?> |
تابع ()$this->db->escape به صورت خودکار یک نقل قول را در اطراف داده ها اضافه می کند و نوع داده را تعیین می نماید تا امکان فرار از داده های رشته (string data) را فراهم آورد.
1 2 3 4 | <?php $sql = "SELECT * FROM some_table WHERE id = ? AND status = ? AND author = ?"; $this->db->query($sql, array(3, 'live', 'Rick')); ?> |
در مثال بالا، علامت سوال (؟) توسط array در پارامتر دوم تابع query () جایگزین می شود.
مزیت اصلی این روش این است که مقادیر به صورت اتوماتیک فرار می کنند که باعث ایجاد کوئری های امن می شود. موتور codeigniter این کار را به صورت خودکار انجام می دهد، بنابراین لزومی نیست که آن را به خاطر بسپارید.
1 2 3 4 | <?php $this->db->get_where('subscribers_tbl',array ('status'=> active','email' => 'info@arjun.net.in')); ?> |
استفاده از active records، موجب تولید ساختار کوئری توسط هر یک از آداپتور های پایگاه داده می شود.
این قابلیت علاوه بر این، امکان نمایش اطلاعات ایمن را فراهم می کند، زیرا مقادیر موجود در این روش به طور خودکار از بین می روند.
در محیط تولید، اغلب نمی خواهیم پیام خطایی برای کاربران نمایش دهیم. چنین قابلیتی در محیط های توسعه با هدف رفع چنین موانعی فعال شود.
چنین پیام خای خطایی ممکن است حاوی اطلاعاتی باشد که نباید به دلایل امنیتی آن را به کاربران سایت نشان داد.
در کدایگنایتر سه نوع فایل در رابطه با این خطا وجود دارد:
محیط های متفاوت کوئری، سطوح گزارش خطا متفاوتی نیز دارند. به صورت پیش فرض development خطاها را نمایش می دهد اما testing و live آن ها را پنهان می کنند.
یک فایل به نام index.php در دایرکتوری ریشه ای codeigniter وجود دارد که برای این منظور استفاده می شود.
اگر ما مقدار صفر را به عنوان یک argument به تابع ()error_reporting منتقل نماییم؛ این عمل موجب مخفی شدن همه خطاها می شود.
اگر حتی با خاموش بودن خطاهای PHP، خطاهای MySQL هنوز باز هستند. می توانید این بار آن را در application/config/database.php خاموش کنید.
همانطور که در زیر نشان داده شده است؛ گزینه db_debug را در dl array$ به FALSE تنظیم نمایید.
1 | $db['default']['db_debug'] = FALSE; |
یک راه دیگر برای رفع این مشکل انتقال خطاها به لاگ فایل ها ( log files ) است.
این عمر موجب مخفی ماندن خطاها از چشمان کاربران می شود.
مقدار log_threshold را به صورت زیر، در config array$ که در فایل application/cofig/config.php به ۱ تنظیم نمایید.
1 | $config['log_threshold'] = 1; |
CSRF به معنای جعل درخواست متقابل است. شما می توانید این حمله را با فعال کردن آن در فایل application/config/config.php مانند زیر نشان دهید.
1 | $config['csrf_protection'] = TRUE; |
هنگام ایجاد فرم با استفاده از تابع ()form_open، این تابع به طور خودکار یک CSRF را به عنوان فیلد پنهان وارد می کند.
علاوه بر این می توانید CSRF را با استفاده از تابع ()get_csrf_token_name و ()get_csrf_hash به صورت دستی اضافه کنید.
تابع ()get_csrf_token_name نام CSRF مورد نظر را بر می گرداند و تابع ()get_csrf_hash مقدار hash را در CSRF باز می گرداند.
نشانه CSRF می تواند هر بار برای ارسال تجدید شود؛ علاوه بر این می توانید آن را در طول عمر کوکی CSRF نیز نگه دارید.
ماطبق شکل زیر می توانید با تنظیم مقدار TRUE، در array پیکربندی با کلید ‘csrf_regenerate’، به باز تولید token بپردازید.
1 | $config['csrf_regenerate'] = TRUE; |
می توانید با استفاده از کلید ‘csrf_exclude_uris’ ، مطابق شکل زیر URL های سفید را از CSRF محافظت نمایید.
علاوه بر این می توانید از عبارت منظم استفاده کنید.
1 | $config['csrf_exclude_uris'] = array('api/person/add'); |
هنگام تنظیم رمز عبور به نکات زیر توجه داشته باشید:
در آموزش امنیت در codeigniter چندین روش پیشگیری کننده یا پیش گیرنده به شما معرفی شد که به یاری این روش ها قادر خواهید بود که کاربری امنی در codeigniter تجربه نمایید.
با پی وی لرن همراه باشید.