2014-03-12 2 views
0

내 매개 변수를 암호화하므로/product/update/1과 같은 링크가/product/update/cdsk45kdi340kd0wlw0 또는 비슷한 것으로 표시됩니다. 컨트롤러와 뷰에서 암호화하고 해독해야합니다. 이것에 대한 최선의 접근 방법은 무엇입니까? 어떤 도움을 주셔서 감사합니다.내 ZF2 응용 프로그램에서 ZF2 암호화 매개 변수

+0

"암호화"를 사용하는 이유를 설명 할 수 있습니까? uuid, slug 또는 hash가 충분하지 않은 이유는 무엇입니까? –

+0

난 그냥 사용자가 ID를 추측하고 URL을 호출 할 수있는 피하기 위해 ... 해시 좋은 대안이 될거예요 줄 수 있습니까? – cwhisperer

답변

1

에 봐. 제품마다 임의의 토큰을 생성합니다. 이 토큰을 제품 ID (및 다른 모든 특성)와 함 2 데이터베이스에 저장하십시오.

임의의 문자열을 토큰으로 생성하려면 Zend\Math\Rand을 사용할 수 있습니다. Rand::getString(10);은 임의의 10 자 문자열을 제공합니다. 데이터베이스에 제품을 저장할 때 모든 제품에 임의의 문자열을 생성하십시오. 그런 다음 컨트롤러에서 식별자 (ID)를 기반으로 제품을 얻지는 않지만 토큰을 기반으로합니다.

+1

고유성을 확인하십시오. 임의의 함수 대신에 uniqid()를 사용할 수도 있습니다. – dualmon

+0

물론, 좋은 지적입니다. 적어도 데이터베이스에 고유 제한 조건을 설정하고 토큰이이 L 존재하는지 점검하십시오. –

+1

랜덤을 생성하는 대신 ID와 이름을 함께 base64 또는 md5로하면 DB에 아무것도 저장하지 않아도됩니다 (검색 할 다른 DB 호출). 이것은 외부 고유 URL이 일반적으로 처리되는 방법입니다. 사용자별로 고유해야 할 경우 암호화하거나 인코딩하는 문자열에 사용자 이메일 및/또는 ID를 포함시킬 수 있습니다. –

1

메이크업 경로가 여기에 요점은 당신이 URL을 추측하는 사용자를 방지 할 것입니다이

'product' => array(
    'type' => 'Zend\Mvc\Router\Http\Segment', 
    'options' => array(
    'route' => '/product/update[/:hashedid]', 
    'constraints' => array(
     'hashedid' => '[a-zA-Z0-9-_\.]+', 
    ), 
    'defaults' => array(
     'controller' => 'Index', 
     'action'  => 'index', 
    ), 
    ), 
), 

같은 컨트롤러

$hashedid = $this->params()->fromRoute('hashedid', 0); 
$id = $this->dehash($hashedid); 
+0

답장을 보내 주셔서 감사합니다 ...하지만 ID를 해시하는 데 사용하려면 어떻게해야합니까? 나는 해시를 위해 소금을 사용하는 것을 선호 할 것이다 ... – cwhisperer

+0

@cwhisperer 소금 소리가 좋기를 원하는대로 사용할 수있다. http://stackoverflow.com/a/1289114/3223896 – Skaza

+0

감사합니다. 유감스럽게도 base64_encode는 암호화 된 문자열에 슬래시 (/)를 생성하여 내 경로를 만들고, 다시 검사 한 제약 조건을 무효로 만듭니다. – cwhisperer