2012-10-23 2 views
1

저는 처음으로 사용자 계정으로 사이트를 구축하고 있습니다. 사용자 로그인 보안을 유지하는 과정에 있습니다. 등록 할 때 암호를 저장하기 전에 암호 해시 한 다음 로그인시 암호가 맞으면 setCookie를 사용하여 사용자 정보로 쿠키를 저장합니다.임의의 값을 세션 "키"로 테이블에 저장하는 것이 안전합니까?

지금 계정을 하이재킹하는 것은 쿠키 값을 수정하는 것만 큼 간단합니다. 나는 사이트를 안전하게 만들고 싶다. 그러나 내가 읽고있는 대부분의 옵션도 너무 복잡해 보일 수 있고 내가 할 수있는 무언가를 사용하고 싶다. 나는 튜토리얼 몇 개를 읽었고 그것을하는 방법에 대한 기본적인 아이디어를 가지고있다. 그러나 그것이 얼마나 안전한지에 관해 모른다.

내 생각은 세션에 대한 테이블을 만들고 userid + 임의의 값을 저장하고, 쿠키를 둘 다 저장하고 모든 페이지에서 테이블에 대해 두 값을 모두로드하고 올바른 경우 갱신하십시오. 이것은 사용자가 다른 장소에서 로그인하더라도 쉽게 만들 수 있고 작동 할 수 있지만 보안 성은 어느 정도인지 알 수 없습니다. 쿠키가 보이지만 누군가가 쿠키를 훔쳐서 갱신하기 전에 사용하지 않으면 세션을 하이재킹 할 방법이 보이지 않습니다.

안전한가요? 어떤 다른 간단한 접근법을 사용할 수 있습니까?

+0

누군가가 훔친 경우에 대한 접근의 kind_ _that DB를 누른 다음 어느쪽으로 든 망가 트린. 데이터베이스에 쿠키를 저장하고 데이터베이스가 안전한지 확인하십시오. – noel

+0

@pst, 정말요? 그것은 "한번 사용한 번호"의 정의를 무시하는 것 같습니다. –

+0

@ 엘 요보 원래 값의 재생성으로 "올바른 경우 갱신"했습니다. –

답변

2

왜 세션 변수에 사용자 이름을 저장하지 않습니까? 클라이언트는 임의의 ID를 저장하고이를 서버에 표시합니다. 그런 다음 서버는 사용자 이름 (서버가 로컬에 있음)과이를 대조합니다. 서버에서만 사용자 이름을 볼 수 있습니다. 코드 작성도 정말 쉽고 PHP는 임의의 ID를 생성하여 클라이언트에게 제공합니다. 사용자가 뭔가 다른 ID를 변경하는 경우 또한 존재하고 로그인 한 다른 사용자가 사용하고 다른 ID에 걸림돌 그들 중 아주 작은 기회가있다.

session_start(); 

//setting the username after they log in 
$_SESSION['username'] = $username; 

//retrieving the username 
//this will work from any file as long as they are on the same server for the same domain 
$username = $_SESSION['username']; 
+0

최근까지 이것을 사용하고있었습니다. 나는 그것이 안전하다는 것을 몰랐다. 문제는 동일한 소스를 사용하여 많은 도메인에서 작동하게하는 것이 어렵다는 것입니다. 이전 소스 사이트에서는 setcookie()로 전환했습니다. 이거 정말 안전합니까? 누군가 쿠키를 복사하면 어떻게됩니까? – lisovaccaro

+0

쉽게 액세스 할 수있는 임의의 ID입니까? 어쨌든 나는 방탄을 비교적 안전하게 만들고 싶지 않습니다. 다른 것이 나오지 않는 한 나는 이것을 선택할 것이다. – lisovaccaro

+0

@ Liso22 예, 이것은 매우 안전합니다. 나는 서버 만이 사용자 이름을 알고 있다는 것을 강조하고 싶다. 클라이언트는 임의의 ID를 가지며 서버에 제시 될 때 서버는이를 사용자 이름과 일치시킵니다. 또한 예, 임의의 ID에 쉽게 액세스 할 수 있습니다. 누군가가 ID를 복사하여 사용하는 것을 막을 수있는 방법이 없습니다. 사용자를 추적하는 방법이 필요하며 클라이언트에 정보를 제공하면 사용자가 정보를 볼 수 있어야합니다. 아마도 한 번에 하나의 IP 주소에서 쿠키 만 사용하도록 허용 할 수 있습니다. –

관련 문제