ホームページ >バックエンド開発 >PHPチュートリアル >10.Laravel5 学習メモ: Laravel でのバッチ割り当ての探索

10.Laravel5 学習メモ: Laravel でのバッチ割り当ての探索

WBOY
WBOYオリジナル
2016-06-23 13:30:22959ブラウズ

問題の説明

laravel のシード関数を使用するとき、学生はよく次の例外を目にします

[IlluminateDatabaseEloquentMassAssignmentException]
ユーザー名

この例外は何ですか?つまり、MODEL::create() メソッドを使用すると、Laravel はシステムのセキュリティを確保し、http リクエストによる作成中に誰かが悪意を持って特定のフィールドをデータベースに挿入して損害を引き起こすことを防ぎます。

公式 Web サイトからの引用

大量割り当ての脆弱性は、ユーザーがリクエストを通じて予期しない HTTP パラメーターを渡し、そのパラメーターがデータベース内の予期しない列を変更する場合に発生します。たとえば、悪意のあるユーザーが is_admin を送信する可能性があります。パラメータは HTTP リクエストを通じてモデルの作成メソッドにマッピングされ、ユーザーが管理者にエスカレートできるようになります

正しい使い方

まず、Seeder が次のようなものであると仮定します

    public function run() {        DB::table('addresss')->delete();        Address::create([            'user_id' => 1,            'identity' => 1,            'longlat' => 'XXXXX',            'province' => 'XXX',            'city' => 'XXX',            'district' => 'XXX',            'detail' => 'XXXX',        ]);    }

この時点で、Address fillable または Guarded 属性を設定し、
php 職人 db:seed --class="AddressTableSeeder" を直接使用すると、上記のエラーが報告されます。 Address

protected $fillable = ['user_id', 'identity', ];
にfillableが設定されているとします

この時点でseedコマンドを実行すると、データベースに新しく追加されたデータはuser_idとidentityの2つのフィールドのみを持つことになります。

上記のプロセスを通じて、バッチ割り当ての意味が明確に理解できます。したがって、作成時にすべてのデータの挿入を完了したい場合は、すべてのフィールドを入力可能に設定する必要があります。

フィールドが多すぎる場合の対処方法

時々、テーブル内のフィールドが多すぎることがありますが、フィールドを 1 つずつ入力可能に書き込むのは混乱しすぎると言うことがあります。史上最もエレガントなフレームワークとして知られる Laravel がこれを考慮しないわけがありません。使用できるガード属性もあります。フィールドが多すぎる場合は、一括割り当てを禁止する必要があるフィールドを設定するだけで済みます。

学習に制限はありません!前進を続け、最近ではアプリのバックエンドサービスを提供するためにlaravelを使い始めました。サードパーティの SDK を使用して変換したいくつかのツールを共有しました。

  • Baidu メッセージ プッシュ Laravel コンポーザー パッケージ
  • API インターフェイス ドキュメントを自動生成する Laravel コンポーザー パッケージ
  • Baidu リッチ テキスト ツール Laravel コンポーザー パッケージ
  • 著作権表示: この記事はブロガーによるオリジナル記事であり、許可なく複製することはできません。ブロガーの許可。

    声明:
    この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。