۱۳۹۹/۰۴/۱۹

امنیت در فریم ورک سیمفونی

آموزش Symfony Security ۱۳۹۸/۰۷/۱۱

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

احراز هویت  (Authentication) و اعمال مجوز (Authorization)

چیزی که پیاده سازی شده  احراز هویت بوده یا مجوز ؟مستندات سیمفونی بطور خلاصه به آنها اشاره کرده است .احراز هویت به معنی شناسایی کابری است که قصد انجام عملیات مختلفی مثل ویرایش متن دارد و بررسی مجوز به معنی این است که آیا کاربر دارای مجوزهای لازم برای انجام این عملیات دارد؟
بطور مثال یک سرباز خانه را در نظر بگرید که علی با مشخصات مشخص قصد ورود به سرباز خانه را دارد.هنگامیه که علی قصد ورود از در دژبانی را دارد .دژبان ها علی را شناسایی میکنند برای ورود به سرباز خانه (Authentication) .بعد از ورود علی به پادگان .علی به انبار مهمات میرود و از ستوان سرلک تقاضای نارنجک میکند.ستوان سرلک مجوز های لازم در مورد علی را بررسی میکند اگر علی دارای مجوز برای داشتن نارنجک داشت ستوان سرلک نارنجک را به علی میدهد.(Authorization).در غیر اینصورت علی با چک لقد بدرقه میشود.

امنیت در سیموفنی

در سیموفنی SecurityBundle به شما امکان میدهید تا بتوانید SecurityComponent را پیکربندی کنید.مهمترین قسمت های SecurityComponent دو مورد firewall  و access_control است.که بیشتر با آنها برای اعمال تنظیمات امنیتی کار خواهید کرد.

برای اعمال تنظیمات مربوط به امنیت در سیموفنی از فایل app/config/security.yml استفاده میکنیم.

از firewall برای اعمال روش های تایید اعتبار استفاده میشود.و برای ان متدها های مختلفی وجود دارد مثل اعتبار سنجی API  با کلید یا  http-basic یا یک فرم لاگین ساده و...کد زیر را در نظر بگرید:

security:
    # ... 

    firewall:
        secured_area:
            pattern: ^/
            anonymous: ~

همانطور که مشاهده میکند این پیکربندی شامل دو قسمت مهم است که هر کدام را بررسی میکنیم :

Pattern

Pattern بررسی میکند که کدام آدرس های اینترنتی بوسیله این دیوار آتش بررسی شوند.اگر درخواستی از یک آدرس وب که با این الگو همخوانی داشته باشد firewall آنرا بررسی میکند.میتوانید آنرا با دژبانی سرباز خانه در مثال بالا مقایسه کنید.

Anonymous

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

Access Control

قسمت مهم دیگر امینت در سیموفنی فریم ورک بررسی سطح دسترسی است .Symfony متد های زیادی برای بررسی دسترسی به منابع دارد متد های مثل حاشیه نویسی   Security@ در کنترلر ها و یا ()AuthorizationCheckerInterface::isGranted

access_control Option

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

security:
    # ...

    access_control:
        # allow anonymous authentication on ^/login but nothing else
        - { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/, roles: IS_AUTHENTICATED_FULLY }

Security Annotation

علاوه بر تنظیم security شما میتوانید برای بررسی سطح دسترسی کاربران برای انجام اعملیات مختلف در کنترلرها هم این بررسی را با security annotation نیز اعمال کنید

<?php
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Security;

class FooController
{
    /**
     * @Security("is_granted('CAN_SEE_POST', post)")
     */
    public function fooAction(Post $post)
    {
        // ...
    }
}
 

با این مثال ساده بهتر با این تنظیمات آشنا می شوید.

// src/AppBundle/Controller/DefaultController.php
// ...

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;

class DefaultController extends Controller
{
    /**
     * @Route("/admin")
     */
    public function adminAction()
    {
        return new Response('<html><body>Admin page!</body></html>');
    }
}

و access_control را در فایل security.yml به صورت زیر پیکربندی میکنیم

# app/config/security.yml
security:
    # ...
    firewalls:
        # ...
        main:
            # ...

    access_control:
        # require ROLE_ADMIN for /admin*
        - { path: '^/admin', roles: ROLE_ADMIN }

با این پیکربندی برای دسترسی به آدرس localhost:8000/admin شما نیاز به کاربری با دسترسی admin دارید .

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

1-  اطلاعات کاربر از طریق فرم طراحی شده خاصی دریافت و در دیتابیس ذخیره کنید.و تنظیمات امنیتی با استفاده از واکشی اطلاعات از پایگاه داده اعمال شود.

۲− راه آسان تر که شما می توانید از آن در نرم افزار هایی استفاده کنید که نیاز به تعریف کاربر های مختلف و تعریف سطح دسترسی پیچیده ندارید و با تعریف یک یا دو کاربر نیاز های امنیتی سیستم برطرف میشود.برای اعمال این تنظیمات به صورت زیر عمل می کنیم.

# app/config/security.yml
security:
    providers:
        in_memory:
            memory:
                users:
                    user:
                        password: ryanpass
                        roles: 'ROLE_USER'
                    admin:
                        password: kitten
                        roles: 'ROLE_ADMIN'
    # ...

 


رای :

Symfony Security

امنیت در سیموفنی

فریم ورک سیموفنی امنیت

عالی کاش به صورت ویدویی هم میشد توضیحات بیشتری بدید.
مرتضی شعبانی : سلام.بله حتما. در حال ساخت آموزش های ویدیئویی و کاربردی تر در این زمینه هستم

ارسال نظر
Copyright © All right reserved.