it-swarm.com.de

Wie verschlüsselt man laravel 5.2 URL oder Routen?

Muss ich Routen in dieser URL verschlüsseln? Weil ich nicht möchte, dass der Benutzer durch Ändern der Artikel-ID auf die URL zugreift. Beispielsweise kann der Benutzer/items/1234 in/item/5678 ändern. Obwohl die Artikel 1234 und 5678 demselben Benutzer gehören, möchte ich das Verhalten dennoch einschränken. Ich versuche, die Routen zu verschlüsseln, bin mir aber nicht sicher, ob dies der richtige Weg ist oder nicht. Irgendwelche Vorschläge?

5
sandip kakade

Sie können Ihre URL-Parameter verschlüsseln und in Ihrem Controller entschlüsseln. Sie können dies versuchen:

In Ihrer Ansicht: Angenommen, Ihr Parameter ist eine id oder mehr Parameter, die Sie verschlüsseln können.

<?php
        $parameter =[
            'id' =>1,
        ];
    $parameter= Crypt::encrypt($parameter);
?>
<a href="{{url('/url/',$parameter)}}" target="_blank">a link</a>

Ihre Route wird sein:

Route::get('/url/{parameter}', '[email protected]');

In Ihrem Controller können Sie Ihre Parameter entschlüsseln:

public function methodName($id){
    $data = Crypt::decrypt($id);
  }

Sie müssen sich in Ihrem obersten Controller als Crypt-Namespace befinden

use Illuminate\Support\Facades\Crypt;

Hinweis: Sie können URL-Parameter mit Crypt::encrypt($parameter) verschlüsseln und mit Crypt::decrypt($parameter) entschlüsseln.

6
Nazmul Hasan

Eine Möglichkeit, dieses Problem zu mindern, wäre die Verwendung von Universally Unique IDs (UUID).

Sie werden nicht mehr das Problem haben, das Datenbank-Crawlen automatisch zu erhöhen, und ein Benutzer kann die URLs nicht ändern, um andere Daten zu erhalten.

Sie können Ihre Datenbank ganz einfach ändern, um dies bei Ihren Migrationen zu unterstützen, indem Sie Ihre ID-Spalte in ändern 

diese:

$table->increments('id');

zu diesem:

$table->uuid('id')->primary();

Ihr Modell kann dann bearbeitet werden, um den nicht inkrementierenden Primärschlüssel zu unterstützen, indem Sie der Klasse Folgendes hinzufügen:

protected $incrementing = false;
3
Josh Bolton

Sie können die Route in Ihrem Controller beim Umleiten verschlüsseln

\Crypt::encrypt(product_id) 

und auf der Produktseite können Sie die Produkt-ID anhand der URL entschlüsseln 

$product_id = \Crypt::decrypt($url_parameter)

das ist der beste Weg.

Es gibt jedoch einige Ausnahmemöglichkeiten, wenn der Benutzer den Parameter Product ID der URL bearbeitet, die Sie bearbeiten müssen.

3
Akshay Khale

Sie möchten nicht alle Routen verschlüsseln. Dies ist eine schlechte Praxis. Sie können den Helper encrypt() zum Verschlüsseln des Parameters und decrypt() zum Entschlüsseln verwenden.

$encryptedId = encrypt($id);

https://laravel.com/docs/5.3/encryption#using-the-encrypter

1
Alexey Mezenin

Es klingt, als ob Sie die gesamte Route verschlüsseln möchten. Es kann keine gute Praxis sein, aber hier ist, wie es geht. Sie haben einen Controller, der alle Anforderungen empfängt. Die gesamte Geschäftslogik muss in Ihre Dienste aufgenommen werden.

  1. In der Routendatei haben Sie eine Route, die auf "/ {encrypted}" und auf eine Controller @ -Methode verweist (der Name liegt bei Ihnen).

  2. Entschlüsseln Sie in der Controller-Methode den verschlüsselten Parameter. Möglicherweise lautet der entschlüsselte String "item/100". Dann müssen Sie $routeParams = explode('/', $decrypted); und an einen Dienst senden, um es zu verarbeiten. z.B. 

if($routeParams[0] == 'item') { return ItemService::get($routeParams[1]); }

Das ist die Grundidee. In der Praxis haben Sie jedoch eine Handler-Klasse, die das Routing Ihrer verschlüsselten URL verwaltet. In dieser Handler-Klasse benötigen Sie ein Konfigurationsarray, das ähnlich wie die Routendatei von Laravel funktioniert.

0
JC Lee

Sie benötigen eine verschlüsselte URL-ID/einen beliebigen URL-Parameter. Dies wird als ID-Verschleierung bezeichnet. Sie können dies mit hashids library tun. es konvertiert eine ganze Zahl wie 347 in yr8 und wieder zurück.

Diese Bibliothek einschließen :

composer require hashids/hashids

Alle anderen einfachen Dinge erhalten Sie von Easy id-Verschleierung mit Laravel 5

Dies hilft Ihnen, die URL-ID zu verschlüsseln:

http://example.com/users/123

ZU

http://example.com/users/Mj3

Hoffe, das wird dir gut helfen!