2011-10-24 4 views
2

나는 포럼을 만들고 쿠키 설정의 모범 사례에 대해서는 확신하지 못합니다. 대신이의PHP와 사이트 보안에서 쿠키 설정하기

 setCookie($name,$ip,time()+300000,"/"); 

: 시간() + 300000 여기

내가 사용자가 사이트를 등록으로 구축 쿠키입니다. 나는 쿠키를 영원히 원한다.하지만 어떻게해야할지 모르겠다.

또한 보안에 관한 질문이 있습니다. 해커가 쿠키를 변조하거나 설정하지 않았는지 확인하려면 어떻게해야합니까?

또 다른 질문은 사용자가 브라우저에서 쿠키를 허용하는지 어떻게 확인합니까?

업데이트 : 내가 바로 로그인 검증이 유효로 이것을 넣어

: ("/", $ 이름, $의 IP, 시간() + 60 * 60 * 24 * 365) 이기에, setcookie가;

UPDATE :

 if(!isset($_COOKIE['$name']) 
     { 
      $salt="[email protected]"; 
      $hash = SHA2(salt + $_POST['pass']); 
      setCookie($name,$hash,time()+60*60*24*365*50,"/"); 
     } 
+0

기술적으로 그 쿠키는 매 페이지 호출마다 재설정되고 새로 고쳐지기 때문에 영원히 지속됩니다. 페이지가 적어도 83 시간마다 한 번 이상 호출되는 한. 기간이 길면 만료 날짜를 길게 설정하십시오. – CD001

+0

이 사실이 아닙니다. 왜냐하면 내가 사용자를 등록한 후에 만 ​​설정하기 때문입니다. – Matrix001

+0

오 - 그리고 $ ip가 그들을 식별하기 위해 사용자의 IP 주소를 가리키면 ... 실제로는 잘 작동하지 않습니다. IP 주소는 장기적으로 식별자로 작동 할만큼 충분히 정적 인 곳이 아닙니다. – CD001

답변

2

지속 기간 동안 300000 대신에 충분히 큰 숫자를 사용하십시오.

time() + 60 * 60 * 24 * 366 * 15은 15 년을 제공합니다.

는 서버에서 (예를 들어, 256 비트 임의의 문자열) 비밀 salt을 저장 ( SHA-2 등) 보안 해시 함수를 사용, 침해를 방지 hash = SHA2(salt + data)을 계산하고 hash을 보유하고 쿠키를 설정합니다.

이제 쿠키를 읽을 때 수행해야 할 일은 hash의 값이 올바른지 확인하는 것입니다.

+0

서버에 부담이 가중되지 않습니까? 해시? – Matrix001

+0

쿠키 확인 자체는 그 이상입니다. 하루에 몇 명의 사용자가 이야기하고 있습니까? – Dennis

+0

권자. 나는 1000s ..를 원한다. 그러나 그 이상을 기대하지 않는다. – Matrix001

1

할 수 있습니다 하지 영원히 쿠키를 설정,하지만 당신은 아주 긴 시간 동안을 설정하고 언제든지 사용자가 사이트를 방문을 새로 고칠 수 있습니다.

두 번째 부분 : 쿠키 값을 데이터베이스에 추가로 저장하고 일치하는 경우 다른 사람이 조작하지 못하도록 설정하십시오.

또 다른 옵션은 쿠키의 식별자와 데이터베이스의 값만 저장하는 것입니다. 그러나 조심하고 아무도 그 식별자를 추측 할 수 없도록하십시오.

는 Btw는 :

그것은이다 : 나는 사용자의 IP는 대부분의 사람들이 - D

가 UPDATE 매일 새로운 영원한 쿠키를 필요 beacause를 영원히 자신의 쿠키에 저장되어야한다 생각하지 않는다 식별을 위해 사용자의 IP를 사용하는 것은 좋지 않습니다. 매일 바뀝니다. 다음과 같이하십시오. 데이터베이스에있는 모든 사용자의 소금을 저장하십시오. "jfdklsjfdsohfdsughfdjkhg"과 같이 무작위로 생성하십시오. 사용자가 저장된 쿠키 "LoggedIn"에 값 md5($username.$salt)을 추가하면 사용자 ID를 저장하는 쿠키가 추가됩니다. 쿠키를 읽는 경우 해시를 md5(databaseName.databaseHash).과 비교하면됩니다. 쿠키가 같으면 쿠키가 좋습니다. 이 시스템에서는 소금이 잘 보호되어 있는지 확인해야합니다 (시스템에서만 알아야합니다).

if(isset($_COOKIE["LoggedIn")) 
{ 
    $userid = $_COOKIE["UserId"] // Second cookie, not hashed to know the user's id 
    //get Values from Database here => $database_name, $database_salt 
    if(md5($database_name.$database_salt) == $_COOKIE["LoggedIn"]) 
    { 
     //OK 
    } 
} 
+0

글쎄, 사용자가 여행하는 모든 페이지에서 유효성을 검사합니까? – Matrix001

+0

많은 전력이 필요하다면 요즘에는 간단한 체크섬을 비교할 수 있습니다. 요즘에는 많은 전력이 필요하지 않습니다. 네, 방문 할 때마다 확인하십시오. 가장 간단한 방법은 쿠키를 설정/읽기하고 데이터베이스를 검사/업데이트하는 독자적인 읽기/쓰기 쿠키 기능을 작성하는 것입니다. – Tokk

+0

제 답변에서 업데이트를 확인하십시오. 이 올바른지? – Matrix001

1

쿠키는 다음과 같습니다. 누구든지 변경할 수 있습니다. Sessions을 사용하면 더 안전 할 수 있으며 쿠키를 사용할 때마다 쿠키 값이 변경되지 않았는지 확인할 수 있습니다.

쿠키도 암호화 할 수 있지만 쿠키에는 글자 수 제한이 있으며 암호화하면 더 커질 수 있으므로 큰 해결책은 아닙니다.

"영구 쿠키"에 대해서는 50 년 만료되도록 설정할 수 있습니다.

+0

이이 방법입니까? : setCookie ($ name, $ ip, time() + 60 * 60 * 24 * 365 * 50, "/"); 사용자가 로그인 할 때마다 그 진술을 반복해서 사용할 수 있습니다. 다른 쿠키를 추가할까요? 또는 기존의 값을 무시합니다. – Matrix001

+0

정수 크기는 플랫폼에 따라 다릅니다. 32 비트 정수를 사용하면 지난 50 년 동안 쿠키를 설정할 수 없습니다. – Dennis

+0

오케이, 5 년으로 설정했습니다 – Matrix001

0

쿠키를 영원히 설정할 수 없습니다. 쿠키의 만료 시간을 길게 설정할 수 있습니다. db 또는 세션에 데이터를 저장하고 일치하도록하십시오. 쿠키를 사용하는 것보다 세션을 사용하는 것이 좋습니다. 세션 데이터는 수정할 수 없습니다.

+0

내 대답은 업데이트를 참조하십시오. 이 올바른지? – Matrix001

관련 문제