2011-02-09 5 views
5

내 웹 사이트에서 보안을 설정하고 ID 보호에 가장 적합한 경로를 찾으려고합니다.URL 문자열의 ID 암호화/인코딩

: 내가 공유 부분을 할 htaccess로 사용하고 http://localhost/share/22349234987sdsdf9sdf87423498asf9

: http://localhost/page.php?id=90 합니다. 그러나 '90'을 숨기고 임의의 숫자를 추가하여 다른 응답을 시도하지 못하도록하려는 것입니다.

이와 비슷한 것을 만드는 방법에 대한 의견이나 구현과 잘 작동하는 것이 있으면 어떻게해야합니까?

보안은 내 친구는 현재 세션 토큰 및 CSRF을 방지하기 위해 비밀로 모든 GET 요청을 서명하는 방법을 구현

+0

어떻게 그렇지 않습니까? 그것은 누구든지 변경할 수있는 간단한 ID를 보여주는 것입니다 ... – Justin

+0

@ Justin : 그래서 뭐? 당신은 여기서'id'를 변경할 수 있습니다. 그것에 문제가 있습니까? – zerkms

답변

3

ID를 숨기는 것은 보안이 아니라 애매합니다.

잘 모르겠 으면 PHP의 mcrypt 함수를보십시오. 인코딩 및 디코딩 전에 소금을 추가하십시오. 그렇지 않으면 암호화/해독을 추측하기 쉽습니다.

다른 사람이 여전히 URL을 가로 질러 넘어져서 완전히 패배 할 수 있습니다. 나는 보안을 원한다면 HTTPS를 통한 HTTP Auth의 형식을 사용한다.

+0

예 HTTPS 구조로 구현했습니다. ID를 가장 잘 보이지 않게하는 방법에 대해 궁금합니다. ID MCrypt에 대해 더 자세히 살펴 보겠습니다. 감사 – Justin

2

... 그래서 그냥 거기에 최선의 해결책을 찾기 위해 노력하고있는 요인이다 공격.

하지만 당신이하려는 것은 다른 사람들과 공유 할 수있는 URL을 갖는 것입니다.

원본 url과 유사한 MD5 해시를 만들어 데이터베이스에 저장할 수 있습니다.

이제/share/someLongId를 열면 해시가 속한 URL을 데이터베이스에서 확인할 수 있으며 사용자를 해당 URL로 리디렉션 할 수 있습니다.

또 다른 가능성은 처음에 자동 증가 ID 대신 GUID를 사용하는 것입니다. 그렇게하면 모든 ID가 길어지고 추측하기 쉽지 않습니다.

1

당신이 그것을 (URL이) 지속 여부를해야하는 경우에 따라, 당신이 할 하나 콜드 :

비 영구적 인 : 다음

function getLink($id) { 
    $random = md5(uniqid()); 
    $_SESSION['links'][$random] = $id; 
    return "http://localhost/share/$random"; 
} 
echo getLink(10); 

과 :

같은 것을 할
function getTrueId($id) { 
    if(isset($_SESSION['links'][$id]) { 
    return $_SESSION['links'][$id]; 
    } else { 
    die("Unknown link!"); 
    } 

}

이 링크는 현재 세션에서 현재 사용자에게 사용 가능하게됩니다. 영구적으로 필요하면 무작위 ID를 생성하여 실제 ID와 함께 데이터베이스에 저장할 수 있지만, 무작위 ID는 실제 ID 대신 동일한 ID를 사용하여 동일한 작업을 수행 할 수 있으므로 무의미 할 수 있습니다.

관련 문제