Tengo una aplicación con Laravel 5.2 . Tengo alguna ruta. Ahora quiero hacer algunas rutas seguras para que nadie pueda adivinar e insertar ningún valor. Ahora quiero agregar algún carácter antes de {id} y después de {id} para que nadie pueda alcanzarlo adivinando.

Route::get('/prize/{id}','PrizeCalculateController@showPrizePage');

Ahora el usuario puede ir a localhost/laravel/public/prize/1 o reemplazar 1 por cualquier cosa y puede ir a esa URL. Quiero que sea seguro para que nadie pueda adivinar.

He intentado con:

$parameter = $qrcode->id;
$encryption= Crypt::encrypt($parameter);

¿Cuál será el mejor enfoque para hacer una ruta segura?

2
Chonchol Mahmud 14 nov. 2017 a las 13:44

2 respuestas

La mejor respuesta

Cifrar la ID generará una cadena muy larga (más de 188 chatacters), no tan amigable.

Puede generar un UUID (32 caracteres) para representar su modelo. Hay muchos paquetes que generan y validan UUID, por ejemplo este.

Para usar el UUID, debe crear una columna en su tabla para representarlo y cargar el modelo por el campo uuid en lugar de id.

Dado que el UUID representa un número muy grande (128 bits uno), es muy difícil de adivinar (prácticamente imposible, una posibilidad en 3.402823669 × 10³⁸).

También haga adivinanzas difíciles (la probabilidad aumenta a medida que aumenta el tamaño de su tabla), puede caducar el UUID periódicamente (o invalidarlo si se usa, por ejemplo). Hay muchas formas de protegerlo, pero todo depende del diseño de su aplicación.

Como no necesita la parte universally unique de UUID, también puede generar una cadena aleatoria grande usando el ayudante str_random() de Laravel. Una cadena de 16 caracteres alfanuméricos también es muy fuerte (4,767240171 × 10²⁸ combinaciones).

Considere agregar un límite de velocidad a esta ruta que también hará que sea muy difícil de adivinar.

1
Elias Soares 14 nov. 2017 a las 11:08

Utilizo esta biblioteca para hash ID: http://hashids.org/php/

Aquí está mi envoltorio para Laravel:

public static function staticHash($number, $obfuscate = false)
{
   $hashids = new \Hashids\Hashids(\Config::get('app.key'));

   return $hashids->encode($number);
}


public static function staticHashDecode($hash, $obfuscate = false)
{
   $hashids = new \Hashids\Hashids(\Config::get('app.key'));
   $number = $hashids->decode($hash);

   if (isset($number[0])) {
      $number = $number[0];
   } else {
      $number = false;
   }

   return $number;
}
0
Laraleg 14 nov. 2017 a las 11:17