データベースIDをあなたのURLに公開しないでください
Webアプリを開発するとき、我々はしばしばデータベースから情報を取り出すことに頼ります.フレームワークは、この簡単な感謝をする方法を提供しますORMs .
ほとんどの場合、ORMは信頼できる識別子としてプライマリキーを使用してモデルを見つけます.大多数の場合、主キーは自動インクリメント整数である.
あなたのURLは次のようになります.
このセキュリティ違反を緩和する簡単な方法は、以下のキーを使用することです. 予測するのが難しい それらの間の不和を維持しながら、アイテムの多くを作成することができるように十分なランダム 簡単にコードとデータベースから生成する チェック可能(我々は、それが有効であるかどうか、その完全性を分析することによって知ることができます) ありがとう.UUIDs それは非常に良い候補です.それは上記のすべての点をチェックして、使用のために準備ができているパッケージの広い範囲のおかげで非常に簡単です.
あなたのURLは今、あなたのアプリケーションの承認ポリシーについての開発者のミスを軽減する予測するのは困難になります
開発を実践するにはLaravel パッケージ、そして私の初めての使用Github Workflow , 私は、この仕事を微風にするパッケージを作成しました.
使用方法はこちらkhalyomede/laravel-eloquent-uuid-slug 今すぐあなたのアプリケーションで.
まず、コンソールに頭を置き、このコマンドを入力します.
では、migration のmodel 選択した場合、または既にインストールされている場合は、新しいものを作成し、スラグの列を追加します.
これは、あなたのモデルがあなたのルートでretreivedされる方法を構成するのを助ける最後のステップですRoute model binding .
今すぐパッケージを利用する準備が整いました.素晴らしいことは、コードが変更されないことです!使用し続けることができます
この解決策は、データリークの初期の問題を解決するための魔法の方法ではありませんが、悪意のあるユーザーがあなたのシステムを騙す可能性を減らすために、非常に簡単な有効なメセアであることがわかります.
これは、あなたが認可またはガードメカニズムを加えるのを防ぐことができませんLaravel Policies 例えば.たとえば、ユーザーが彼/彼女によって作成されていないカートに移動する場合は、それを表示することはできません.
他の人々はすでにこの主題について話しました、それで、UUIDを使用することについてより多くを読みたいならば、それを行ってください.
ハッピーURL硬化!
ほとんどの場合、ORMは信頼できる識別子としてプライマリキーを使用してモデルを見つけます.大多数の場合、主キーは自動インクリメント整数である.
あなたのURLは次のようになります.
https://example.com/cart/12
https://example.com/user/15/post/41
...
不適切であるか不完全な認可層を提供することはデータ漏出をつくることができます:ユーザーはデータからデータまで動くことができます.識別子の難読化
このセキュリティ違反を緩和する簡単な方法は、以下のキーを使用することです.
あなたのURLは今、あなたのアプリケーションの承認ポリシーについての開発者のミスを軽減する予測するのは困難になります
https://example.com/cart/f6e4208f-5df4-466e-9225-01f296e2a09c
https://example.com/user/b1b44b12-34bc-4ed7-a666-9657b8b8c31b/post/e530d034-42f7-467b-91e3-1cc9313312eb
laravelアプリの例
開発を実践するにはLaravel パッケージ、そして私の初めての使用Github Workflow , 私は、この仕事を微風にするパッケージを作成しました.
使用方法はこちらkhalyomede/laravel-eloquent-uuid-slug 今すぐあなたのアプリケーションで.
パッケージのインストール
まず、コンソールに頭を置き、このコマンドを入力します.
composer require khalyomede/laravel-eloquent-uuid-slug
あなたの移動にスラグコラムを追加
では、migration のmodel 選択した場合、または既にインストールされている場合は、新しいものを作成し、スラグの列を追加します.
namespace Database\Migrations;
use App\Models\Cart;
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
final class AddSlugColumnToCartTable extends Migration {
public function up(): void
{
Schema::table('carts', function (Blueprint $table): void {
Cart::addSlugColumn($table);
});
}
public function down(): void
{
Schema::table('carts', function (Blueprint $table): void {
Cart::dropSlugColumn($table); // available soon in v0.2.0
});
}
};
モデルにトレードを追加する
これは、あなたのモデルがあなたのルートでretreivedされる方法を構成するのを助ける最後のステップですRoute model binding .
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use Khalyomede\EloquentUuidSlug\Sluggable;
final class Cart extends Model
{
use Sluggable;
}
お使いのコントローラーで使用してください
今すぐパッケージを利用する準備が整いました.素晴らしいことは、コードが変更されないことです!使用し続けることができます
route()
閉じるこの動画はお気に入りから削除されています.// routes/web.php
use App\Models\Cart;
use Illuminate\Http\RedirectResponse
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Route;
use Illuminate\View\View;
Route::get("cart/{cart}", function (Cart $cart): View {
return view("cart.show", [
"cart" => $cart,
"saveCartRoute" => route("cart.store", $cart),
]);
})->name("cart.show");
Route::post("cart/{cart}", function (Request $request, Cart $cart): RedirectResponse {
$cart->update($request->only(["name"]));
return redirect()->route("cart.show", $cart);
})->name("cart.store");
そして、Vilは引きます!このパッケージは、あなたが見ることができるように、既存のロジックとやりとりしません.変更が現在あなたのルートが露出していない唯一のもの.route("cart.show", $cart); // https://example.com/cart/398e76a7-7c16-467c-93a8-04c06c6df703
結論
この解決策は、データリークの初期の問題を解決するための魔法の方法ではありませんが、悪意のあるユーザーがあなたのシステムを騙す可能性を減らすために、非常に簡単な有効なメセアであることがわかります.
これは、あなたが認可またはガードメカニズムを加えるのを防ぐことができませんLaravel Policies 例えば.たとえば、ユーザーが彼/彼女によって作成されていないカートに移動する場合は、それを表示することはできません.
他の人々はすでにこの主題について話しました、それで、UUIDを使用することについてより多くを読みたいならば、それを行ってください.
JavaScriptでUUIDを生成する4つのパッケージ
ラハルバンケル・ 8月16日・ 1分読む
#node
#javascript
#codenewbie
#programming
なぜあなたのインクリメントIDを公開すべきではない
ジェロネンバンレンセン・ Mar 7・ 3分読む
#laravel
#security
LaravelでURLでUUIDを使う方法
ジェロネンバンレンセン・ Mar 10・ 2分読む
#laravel
#security
#uuid
ハッピーURL硬化!
Reference
この問題について(データベースIDをあなたのURLに公開しないでください), 我々は、より多くの情報をここで見つけました https://dev.to/khalyomede/do-not-expose-database-ids-in-your-urls-567テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol