저는 PHP로 RIA 작업을하고 있습니다. 세션 하이재킹을 막으려면 로그인시 생성 된 토큰을 소금, ISO-8601 주 번호 및 사용자 IP를 기반으로 도입했습니다.PHP : 토큰을 쿠키로 저장하여 세션 하이재킹을 막으시겠습니까?
$salt = "blahblahblah";
$tokenstr = date('W') . $salt . $_SERVER['REMOTE_ADDR'];
$token_md5 = md5($tokenstr);
define("token_md5", $token_md5);
현재, 그것은 모든 요청 GET 또는 POST를 통과,하지만 그것은 사용자의 IP에 의존하기 때문에 나는 쿠키로 제공함으로써이 문제를 피할 수 있는지 궁금 해서요. 나는 지금 막 세션을 배우기 때문에 보안 문제가 있는지 궁금하다. 나쁜 생각입니까?
일반 세션 재생성과 토큰을 조합하거나 다른 두 가지를 삭제하고 IP를 비교해야한다고 생각합니까? 나는 현재의 토큰이 이것을 커버한다고 생각한다. 왜냐하면 사용자의 IP로 액세스하려고 시도하기 때문이다. 즉, 유효한 사용자의 토큰을 스푸핑하는 것은 IP를 공유하지 않는 한 좋지 않습니다. 맞습니까? – Greg
확실히 결합되어 있지 않습니다. 세션 재생성은 보안과 관련하여 많은 것을 얻지는 않지만 다른 용도로 자유롭게 사용할 수 있습니다. 토큰의 경우, 하이 잭 범인은 표적의 토큰을 훔치기보다는 소금을 다룰 수 있다면 (소금을 덜 만들고 비밀 키를 더 많이 만들 수 있다면) 자신의 것을 생성 할 수 있습니다. 클라이언트의 데이터가 신뢰할 수없고 세션의 주요 지점이 클라이언트에 저장해야하는 유일한 것이 세션 ID라는 점을 감안할 때 클라이언트에 데이터를 저장하는 모든 구성표를 삭제하십시오. 서버 측에서 IP (및 날짜)는 비밀이 아니므로 해시가 필요하지 않습니다. – outis
이 기술을 사용하여 CSRF를 조심하십시오. 이것만으로는 사용자의 의도를 확인하지 않고 로그인 한 것입니다. 공격자는 공격자 자격 증명으로 새 관리자를 만드는 것과 같이 양식 중 하나의 동작으로 연결되는 링크를 클릭하도록 유도 할 수 있습니다. 이를 방지하려면 질문에서 기술을 사용하여 해시를 만들고이를 폼의 동작 (및 세션)에 추가 한 다음 반대쪽 끝을 비교합니다. 두 값이 일치하는 경우에만 작업을 수행하십시오. 즉, 작업에 클릭 한 사용자가 처음에 양식을 생성 한 것과 같습니다. – DampeS8N