2012-09-25 6 views
1

간단히 직렬화 된 세션 데이터, 세션 ID 및 현재 시간을 테이블에 저장하는 간단한 사용자 지정 세션 처리기 (MySQL에는 있지만 관련이 없습니다)를 작성했습니다.맞춤형 처리기에서 PHP 세션 ID 보호

세션이 존재하는 동안 세션 ID는 공격자의 암호만큼이나 중요하므로 어떤 방식 으로든 세션 ID를 암호화해야한다고 생각합니다.

공격자가 쿠키를 위조하기 위해 세션 ID를 강제로 강요하기 위해 세션 ID를 데이터베이스에 저장하기 전에 해시하는 것이 좋습니다.

내 사이트는 이미 모든 연결에 HTTPS를 사용합니다.

+0

는 세션 ID 유래 여기에 "암호화"인가? 식별자 자체가 아닌 여러 클라이언트에서 동일한 세션의 악의적 인 사용을 방지해야합니다. – zerkms

+0

@zerkms, 세션 테이블을 읽을 수 없다면 알 수 없습니다. – Martin

+0

사이트의 사용자가 세션 테이블을 읽을 수 있습니까? – zerkms

답변

0

그래서 당신이 방지하려는 것은 공격자가 데이터베이스에서 세션 ID의 덤프에 대한 액세스 권한을 얻을 경우와 같이 자신이 세션 ID를 사용할 수 있기 때문에, 그가 어떤 임의의 사용자로 제기 할 수 있다는 것입니다. 이것을 위해 암호를 해싱하는 것과 같은 방식으로 ID를 해시하는 것이 실제로 좋은 생각이므로 단방향 조회가 가능하지만 해쉬 된 값 자체는 쓸모 없게되었습니다. 세션 ID도 매우 빨리 만료되기 때문에 무차별 강제로 사용하는 방법은 거의 없습니다. 세션 ID는 일반적으로 매우 빠르게 만료 이후 한편

,로 시작하는 것이 훨씬 포인트가되지 않을 수 있습니다. 기회 창은 공격자에게는 매우 작습니다. 공격자가 데이터베이스에서 세션 ID 덤프를 얻을 수 있다는 사실은 공격자가 이미 다른 데이터에도 액세스하고 있음을 의미하므로 훨씬 더 무거 우며 훨씬 더 심각한 위반입니다.

아직 약간의 단점과 가치 방어 (약간의 계산 오버 헤드, 세션 ID의 약간 더 복잡한 디버깅)입니다.

+0

가되지 않습니다 (+ 의견을) 당신이 원래의 질문을 재고하고 있기 때문에 현재 버전에서 다시 물어 추천 할 것입니다 귀하의 해커가를 읽을 수있는 데이터베이스에 액세스 할 수있는 시점에서 어쨌든 당황한 세션 ID. 세션을 간단하게 정리할 수도 있습니다. 중요한 데이터를 암호화하고 일종의 권한 에스컬레이션 기능을 구현하는 것이 시간 낭비 일 가능성이 높습니다. – James

+0

나는 정말로 내 세션이 만료되도록 설정했지만 PHP는 GC 메커니즘을 사용하여 세션을 정리합니다. 확률로 예상보다 오래 살 수있는 기회가 있습니다. – Martin

+0

@Martin 귀하의 처리기는 만료 점검을 포함하거나 포함시켜야합니다. – deceze