내 웹 응용 프로그램PHP에서 세션 변수를 보호하는 효율적인 방법은 무엇입니까?
PHP에서 세션 변수를 보호하는 가장 효율적인 방법은 무엇인가 .. 거의 모든 응용 프로그램 전체에서
UserId
를 사용?세션이 공격에 취약합니까?
내 암호화 된 값인
UserId
을 세션에 보관해야합니까?
어떤 제안 ...
내 웹 응용 프로그램PHP에서 세션 변수를 보호하는 효율적인 방법은 무엇입니까?
PHP에서 세션 변수를 보호하는 가장 효율적인 방법은 무엇인가 .. 거의 모든 응용 프로그램 전체에서 UserId
를 사용?
세션이 공격에 취약합니까?
내 암호화 된 값인 UserId
을 세션에 보관해야합니까?
어떤 제안 ...
참고 :이 my previous answer에서 촬영.
session_start();
을 최대한 빨리 PHP는 (기본적으로) PHPSESSID
라는 쿠키를 찾습니다 것을 전화로. 이 발견되지 않으면, 그것은 하나를 만들 것입니다 :
PHPSESSID=h8p6eoh3djplmnum2f696e4vq3
를가 발견되면, 그것은 PHPSESSID
의 값을 취하고 해당 세션을로드합니다. 이 값을 session_id
이라고합니다.
이것이 클라이언트가 알 수있는 유일한 것입니다. 세션 변수에 추가하는 것은 서버에 유지되며 절대로 클라이언트로 전송되지 않습니다. $_SESSION
의 내용을 변경하면 해당 변수가 변경되지 않습니다. 당신이 그것을 파괴하거나 시간이 끝나기 전까지는 항상 같은 상태를 유지합니다. 따라서 해시 또는 다른 방법으로 클라이언트가 정보를 수신하거나 보내지 않아서 $_SESSION
의 내용을 난독 화하려고 시도하는 것은 쓸모가 없습니다.
그런 다음, 새로운 세션의 경우, 당신은 변수를 설정합니다 :
$_SESSION['user'] = 'someuser';
클라이언트는 해당 정보를 볼 수 없을 것입니다. 악의적 인 사용자가 다른 사용자의 session_id
을 훔치는 경우
있는 보안 문제가 발생할 수 있습니다. 일종의 수표없이 그는 그 사용자를 사칭 할 자유가 있습니다.우리는 고객이 아닌 클라이언트를 고유하게 식별 할 수있는 방법을 찾아야합니다.
가장 효과적인 전략은 세션을 시작한 클라이언트의 IP가 세션을 사용하는 사람의 IP와 동일한 지 확인하는 것입니다.
if(logging_in()) {
$_SESSION['user'] = 'someuser';
$_SESSION['ip'] = $_SERVER['REMOTE_ADDR'];
}
// The Check on subsequent load
if($_SESSION['ip'] != $_SERVER['REMOTE_ADDR']) {
die('Session MAY have been hijacked');
}
그 전략의 문제는 클라이언트가 사용자가 동적 IP를 가지고 (긴 기간 세션에)로드 밸런서, 또는를 사용하는 경우, 그것은 거짓 경고를 트리거 것입니다.
또 다른 전략은 클라이언트의 사용자 에이전트를 확인하는 것을 포함한다 :
if(logging_in()) {
$_SESSION['user'] = 'someuser';
$_SESSION['agent'] = $_SERVER['HTTP_USER_AGENT'];
}
// The Check on subsequent load
if($_SESSION['agent'] != $_SERVER['HTTP_USER_AGENT']) {
die('Session MAY have been hijacked');
}
그 전략의 단점은 클라이언트 업그레이드 경우 브라우저는 점이다 또는 부가 기능 (일부는 사용자 에이전트에 추가)를 설치, 사용자 에이전트 문자열이 변경되고 잘못된 경고가 트리거됩니다.
또 다른 전략은 각 5 요청마다 session_id
을 회전하는 것입니다. 그런 식으로 session_id
은 이론적으로 도용 될만큼 오래 있지 않습니다.
if(logging_in()) {
$_SESSION['user'] = 'someuser';
$_SESSION['count'] = 5;
}
// The Check on subsequent load
if(($_SESSION['count'] -= 1) == 0) {
session_regenerate_id();
$_SESSION['count'] = 5;
}
이러한 전략을 원하는대로 조합 할 수 있지만 단점도 함께 고려해야합니다.
불행히도, 해결책은 바보가 아닙니다. session_id
이 손상되면 거의 완료됩니다. 위의 전략은 막 스톱 갭 조치입니다.