2017-11-14 5 views
2

나는 응용 프로그램을 가지고 Laravel 5.2. 나는 어떤 길을 가졌어. 이제는 누군가가 추측하고 어떤 값을 삽입 할 수 없도록 몇 가지 경로를 안전하게 만들고 싶습니다. 이제 {id}{id} 앞에 일부 문자를 추가하여 추측하여 연결할 수 없도록하십시오.Laravel 5.2에서 안전한 경로를 만드는 방법?

Route::get('/prize/{id}','[email protected]'); 

이제 사용자는 localhost/laravel/public/prize/1로 이동하거나 아무것도에 의해 하나를 교체하고 해당 URL로 이동 할 수 있습니다. 누구나 짐작할 수 없도록 보안을 유지하고 싶습니다.

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

가 어떤 경로를 확보 할 수있는 가장 좋은 방법이 될 것입니다 :

나는 함께 시도?

+2

: http://hashids.org/php/

여기 Laravel 내 래퍼. 문서를 참조하십시오! https://laravel.com/docs/5.2/middleware –

+0

@HirenGohel 나는 사용자에게 '미들웨어'를 사용했습니다. 그러나 나는 어떤 사용자라도'../ prize/12' 등'id'를 타이프하는이 URL을 방문 할 수 없도록 만들고 싶다. –

답변

1

ID를 암호화하면 매우 긴 (188 개 이상의 chatacters) 문자열이 생성되므로 친숙하지 않습니다.

UUID (32 자)을 생성하여 모델을 나타낼 수 있습니다. UUID를 생성하고 검증하는 많은 패키지가 있습니다 (예 : this one).

UUID를 사용하려면 테이블에 열을 만들어 표현하고 id 대신 uuid 필드로 모델을로드해야합니다.

UUID가 매우 큰 숫자 (128 비트 중 하나)이므로 매우 추측하기 어렵습니다 (사실상 불가능합니다, 3.402823669 × 1038).

테이블 크기가 커질수록 확률이 높아집니다. UUID를 주기적으로 만료시킬 수 있습니다 (예 : 사용되는 경우 무효화 할 수 있음). 보안 방법은 여러 가지가 있지만 모두 응용 프로그램 설계에 따라 다릅니다.

UUID의 일부인 universally unique이 필요하지 않으므로 Laravel의 도우미 str_random()을 사용하여 큰 임의의 문자열을 생성 할 수도 있습니다. 16 자의 영숫자 문자열 또한 매우 강합니다 (4.767240171 × 10.28 조합).

이 경로에 속도 제한을 추가하면 추측하기가 매우 어렵습니다.

+0

'str_random()이 내 목적에 부합한다고 생각합니다. 어떻게 할 수 있니? 나는이 문자열을 컨트롤러에서 생성하여 URL에 전달한다는 의미인가? –

0

나는 ID를 해시이 lib 디렉토리를 사용 : 나는`middleware`를 사용하는 것이 가장 좋습니다 생각

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; 
}