라 라벨에서“대량 할당”이란 무엇입니까?
Eloquent ORM 주제 부분에 대해 Laravel Document를 살펴볼 때 새로운 용어가 생겼습니다 Mass Assignment
.
문서 쇼는 어떻게 대량 할당과해야 할 일 fillable
이나 guarded
속성을 설정합니다. 그러나 그 과정을 거친 후에는 Mass Assignment
그것이 어떻게 작동하는지 명확하게 이해하지 못했습니다 .
CodeIgniter에서의 과거 경험에서 나는이 용어에 대해 듣지 못했습니다.
누구든지 그것에 대해 간단한 설명이 있습니까?
대량 할당은 모델 생성에 배열을 보낼 때입니다. 기본적으로 모델에서 여러 필드를 하나씩 이동하지 않고 한 번에 설정합니다.
$user = new User(Input::all());
(이것은 모델의 각 값을 명시 적으로 설정하는 것이 아닙니다.)
fillable
실제로 업데이트 할 필드를 보호 할 수 있습니다 .
사용자 테이블 user_type
에 user / admin 값을 가질 수 있는 필드가 있다고 가정 해 봅시다.
분명히, 사용자가이 값을 업데이트 할 수 없도록하기를 원합니다. 이론적으로 위의 코드를 사용하면 누군가가 양식에 새 필드를 삽입 user_type
하고 다른 양식 데이터와 함께 'admin'을 보낼 수 있으며 계정을 관리자 계정으로 쉽게 전환 할 수 있습니다 ... 나쁜 소식입니다.
추가하여:
$fillable = array('name', 'password', 'email');
다음 값을 사용하여 해당 값만 업데이트 할 수 있습니다 mass assignment
user_type
값 을 업데이트하려면 다음 과 같이 모델에 명시 적으로 값을 설정하고 저장해야합니다.
$user->user_type = 'admin';
$user->save();
대량 할당은 지정된 모델에 한 번에 저장 될 데이터 배열을 보내는 프로세스입니다. 일반적으로 데이터를 모델별로 하나씩 저장하지 않아도 단일 프로세스로 저장할 필요가 있습니다.
대량 할당은 좋지만 특정 보안 문제가 있습니다. 누군가가 모델에 값을 전달하고 보호하지 않으면 ID를 포함한 모든 필드를 확실히 수정할 수 있습니다. 그 좋지 않다.
하자 당신은 필드, '학생'테이블이 있다고 가정 해 "student_type, FIRST_NAME, LAST_NAME" 당신은 대량 할당 "FIRST_NAME, LAST_NAME"을 할 수 있습니다.하지만 당신은 보호 할 student_type 직접 변경되는.의 그 어디에서 채울 수 및 보호 포획 장소.
채움 가능을 사용하면 모델에서 어떤 필드를 대량 할당 할 수 있는지 지정할 수 있습니다 $fillable
. 모델에 특수 변수 를 추가하면 됩니다. 따라서 모델에서 :
class Student extends Model {
protected $fillable = ['first_name', 'last_name']; //only the field names inside the array can be mass-assign
}
' student_type '은 포함되지 않으므로 면제됩니다.
보호는 채울 수있는 것과 반대입니다. 채울 수있는 필드에 대량 할당 할 필드를 지정하면 guarded는 대량 할당 할 수없는 필드를 지정합니다. 따라서 모델에서 :
class Student extends Model {
protected $guarded = ['student_type']; //the field name inside the array is not mass-assignable
}
$ fillable 또는 $ guarded 중 하나만 사용해야합니다.
자세한 내용은 다음 링크를 참조하십시오 :- 대량 할당
대량 할당은 데이터 배열을 사용하여 하나 이상의 열로 행을 채우는 것을 의미합니다. 를 사용하여 (어레이를 수동으로 빌드하는 대신 바로 가기) 사용하십시오 Input::all()
.
엄밀히 말하면 내 머리 꼭대기에서. 채울 수 있음은 테이블에서 삽입 할 수있는 열을 의미하며 보호는 모델이 해당 특정 열에 삽입 할 수 없음을 의미합니다.
like로 대량 할당을 시도 할 때 "secret"이라는 열에 삽입하고 보호되도록 지정하면 모델을 통해 삽입 할 수 있지만 실제로는 삽입되지 않습니다. 데이터베이스.
모델을 사용할 때 테이블을 보호하고 보호하기위한 것입니다. 대량 할당은 모델에 채울 수 있고 보호되는 모델을 알려주지 않고 일종의 공격에 취약하다는 통지 또는 경고 인 것 같습니다.
최신 정보
들어 Laravel 5.x의 + 최신 문서를 참조 할 수 있습니다 대량 할당
또는
채울 수 있거나 사용하는시기에 대한 자세한 설명
수신 된 데이터 배열이 모델에 한 번에 저장되는 경우입니다.
laravel에서이 방법의 보안 문제로 인해 요청 된 데이터를 모델에서 채울 필드를 정의하는 것이 좋습니다.
$fillable
변수를 사용하여 데이터베이스 테이블에서 채울 필드를 정의 할 수 있습니다 .
예 :
Protected $fillable = [‘username’, ‘dob’, ‘email’,];
laravel이 데이터를 대량 할당하는 것을 감지하면 모델 클래스에서 대량 할당하려는 필드를 강제로 정의합니다.
누군가 원치 않는 데이터를 데이터베이스의 html 양식으로 쉽게 전달할 수 있습니다.
참고 URL : https://stackoverflow.com/questions/22279435/what-does-mass-assignment-mean-in-laravel
'IT story' 카테고리의 다른 글
Spring : 왜 우리는 구현 된 클래스가 아닌 인터페이스를 자동 와이어 링합니까? (0) | 2020.06.29 |
---|---|
Collections.emptyMap () 대 새로운 HashMap () (0) | 2020.06.29 |
Properties.Settings.Default는 어디에 저장됩니까? (0) | 2020.06.29 |
array ()와 []의 PHP 차이점 (0) | 2020.06.29 |
CSS flexbox에서 래핑 할 요소를 지정하는 방법은 무엇입니까? (0) | 2020.06.29 |