Laravel의 URL에서 UUID를 사용하는 방법

7650 단어 uuidlaravelsecurity
이 게시물은 my website 에 처음 게시되었습니다. 업데이트를 확인하십시오.

previous post 에서 보안 및 기타 문제로 인해 기본 증분 ID를 노출하지 말아야 하는 이유를 설명했습니다. 운 좋게도 이 문제에 대한 몇 가지 솔루션이 있습니다: 슬러그 및 UUID.

슬러그에 대한 자세한 내용을 보려면 여기read more를 참조하세요.

이 게시물에서는 Laravel을 사용하여 UUID를 구성하는 방법을 보여 드리겠습니다. 그러면 다음과 같은 URL을 얻을 수 있습니다.

http://www.example.org/orders/065e9fb3-6bec-494c-9917-4ab8e71750d4
http://www.example.org/users/d3835dda-e08f-4ed5-baff-756d62a749b2
http://www.example.org/images/avatar-d54a923b-c5d4-4294-8033-a221a57ef361.jpg


마이그레이션



먼저 마이그레이션에 uuid 열을 추가해야 합니다. Laravel에는 우리가 사용할 수 있는 UUID column이 있습니다.

// database/migrations/create_posts_table.php

Schema::create('posts',  function  (Blueprint  $table)  {
    $table->id();
    $table->uuid('uuid')->unique(); // <!-- Add the UUID column in your migration
    $table->string('title');
    $table->text('body');
    $table->timestamps();
});


모델



다음으로 모델(예: 게시물)이 생성될 때마다 UUID를 자동으로 할당하려고 합니다. 우리 모델의 boot 모델에서 그렇게 할 수 있습니다.

// app/Models/Post.php

use Illuminate\Support\Str;

protected  static  function  boot()
{
    parent::boot();

    static::creating(function  ($model)  {
        $model->uuid = (string) Str::uuid();
    });
}


공장



모델 팩토리를 사용하여 테스트 모델을 빠르게 생성하는 경우 팩토리를 사용할 때도 boot 메서드가 실행되기 때문에 아무 것도 추가할 필요가 없습니다.

라우팅



마지막 단계는 route 파일을 업데이트하는 것입니다. routes/web.php 파일에서 Route Model Binding을 사용할 때마다 끝에 :uuid를 추가하십시오.

// routes/web.php

Route::get('/posts/{post:uuid}', [PostController::class, 'show'])
    ->name('posts.show');


이제 Laravel은 라우팅을 위해 자동으로 UUID 열을 사용합니다.

URL



URL을 사용하는 경우 모든 곳에서 경로를 업데이트해야 합니다. 예를 들어:

// resources/views/posts/index.blade.php

<ul>
    @foreach($posts as $post)
        <li>
            <a href="{{ url('/posts/' . $post->uuid) }}">
                {{ $post->title }}
            </a>
        </li>
    @endforeach
</ul>


경로 도우미


route 도우미 메서드를 사용하는 경우 아무 것도 변경할 필요가 없습니다! 예를 들어:

// resources/views/posts/index.blade.php

<ul>
    @foreach($posts as $post)
        <li>
            <a href="{{ route('posts.show', $post) }}">
                {{ $post->title }}
            </a>
        </li>
    @endforeach
</ul>


결론



보시다시피, Laravel을 사용하면 UUID를 사용하고 증가하는 ID를 숨기기가 매우 쉽습니다. 이 게시물이 마음에 드셨기를 바라며, 마음에 드셨다면 아래에서 제 뉴스레터를 구독하실 수 있습니다.

좋은 웹페이지 즐겨찾기