ライブワイヤーセキュリティ


公式ララヴェルLiveWireページhttps://laravel-livewire.comでは、“Vueのようなツールと反応は非常に強力ですが、完全なスタック開発者のワークフローに追加する複雑さは非常識です.”そして、私は全く同意します.時には静的なページアプリケーションが必要になる場合があります.ときどき、対話型のコンポーネントを使用する必要がありますが、問題は、小規模または中規模のプロジェクトの新しいフレームワークを学ぶ時間がないことです.LiveWireもフレームワークですが、このフレームワークはRalavelとの強い関係を持っているので、完全なスタック開発者はバックエンドを残さずに対話型アプリケーションを作成できます.LiveWireは、CRUDページ、EShopカート、評価フォームや他のインタラクティブなオブジェクトを使用してフォームを確認する必要がある場合、あなたの親友になることができますが、我々が相互作用について話しているなら、それは、データがユーザーのWebブラウザ上で表示されることを念頭に置いておく必要があることを意味します.LiveWireで作られたCRUDを言いましょう.Webブラウザのコンソールでフォームを送信すると、多くの変数を値で送信することがわかります.このデータが単にブログのタイトルや説明である場合は問題はありませんが、企業やユーザーが敏感なデータを持っている場合、または検査対象の値を変更することによってWebブラウザで簡単に変更することができる企業IDを持つフィールドについてはどうしますか.これは、ユーザーが会社のIDを変更することができますし、彼は別の会社についての情報を得ることができることを意味します.もちろん、我々はこのユーザーがこの会社に属しているかどうかをチェックするためにバックエンド側に余分なセキュリティを必要とします.しかし、我々は簡単な方法で行うことができます我々の情報を暗号化することです.それで、Labavel Bladeテンプレートのボタンを持っていると言いましょう.
<button wire:click="deleteUser({{$user->id}})">Delete user</button>
しかし、Webブラウザでは次のようになります.
<button wire:click="deleteUser(12)">Delete user</button>
そして、この12を別の値に変更することができる.幸運なブレードは、「crypt」のようなlaravel暗号化サービスをサポートします.それで、刃ファイルで我々は加えることができます:
<button wire:click="deleteUser('{{Crypt::encrypt($user->id)}}')">Delete user</button>
Webブラウザでは次のようになります.
<button wire:click="deleteUser('tOJpdiI6InZQcEpmSW1NdkNjK3pyd1lWM2JyY3c9PSIsInZhbHVlIjoiM0pBQWpnABK6R3NIT1ZtdGlGT0Fjdz09IiwibWFjIjoiYjhkMDBjYzk5NzcxZjRhMjJjYjVmNzM2MTk5M2MwZjY1MWEzMWQ2ZTZjNzkzZDk3YjI0NTkxYmE4NmJhOTcwMSJ9')">Delete user</button>
関数パラメータの単一引用符を追加することを忘れないでください.
LiveWireコンポーネントクラスでは、“DeleteUser”メソッドを追加できます.
public function deleteUser($id)
{
    try {
        $id = Crypt::decrypt($id);

        ...
        Remove user from company by decrypted id
        ...

    } catch (DecryptException $e) {
        ...
        Return error
        ...
    }
}
「decryptException」契約と「crypt」ファサードを加えるのを忘れないでください
use Illuminate\Contracts\Encryption\DecryptException;
use Illuminate\Support\Facades\Crypt;
もう一つの重要なことは、私たちのコンポーネントのクラス公開変数にどんな情報があるかです.たぶん、それはループモデルの項目に最適なソリューションではないが、それは非常に我々が表示したくない情報をフィルタリングすることができます.
$this->company_users = [];
foreach ($company->users as $key => $company_user) {
    $temp_user = [
        'id' => Crypt::encrypt($company_user->id), 
        'name' => $company_user->name,
        'surname' => $company_user->surname
    ];
    $this->company_users[] = $temp_user;
}
それで、私たちが$ thisに追加することを意味します.