PHP로 책임있는 세션 보안을 유지하기위한 지침은 무엇입니까? 웹 전체에 정보가 있으며 모든 정보가 한 곳에 도착한시기입니다.
답변
세션을 안전하게 유지하기 위해 수행해야 할 몇 가지 작업이 있습니다.
- 사용자를 인증하거나 민감한 작업을 수행 할 때는 SSL을 사용하십시오.
- 보안 레벨이 변경 될 때마다 (예 : 로그인) 세션 ID를 재생성하십시오. 원하는 경우 요청마다 세션 ID를 다시 생성 할 수도 있습니다.
- 세션 시간 초과
- 레지스터 전역을 사용하지 마십시오
- 서버에 인증 세부 사항을 저장하십시오. 즉, 쿠키에 username과 같은 세부 정보를 보내지 마십시오.
- 를 확인하십시오
$_SERVER['HTTP_USER_AGENT']
. 이것은 세션 하이재킹에 작은 장벽을 추가합니다. IP 주소를 확인할 수도 있습니다. 그러나 이것은 여러 인터넷 연결 등의 부하 분산으로 인해 IP 주소가 변경되는 사용자에게 문제를 일으 킵니다 (여기서는 우리 환경의 경우). - 파일 시스템의 세션에 대한 액세스를 잠 그거나 사용자 정의 세션 처리를 사용하십시오.
- 민감한 작업의 경우 로그인 한 사용자에게 인증 세부 정보를 다시 제공하도록 요구하십시오.
답변
한 가지 지침은 세션의 보안 수준이 변경 될 때마다 session_regenerate_id 를 호출 하는 것입니다. 세션 하이재킹을 방지하는 데 도움이됩니다.
답변
내 두 개 이상의 센트 :
- 아무도 믿지 마라
- 필터 입력, 이스케이프 출력 (쿠키, 세션 데이터도 입력)
- XSS를 피하십시오 (HTML을 잘 유지하고 PHPTAL 또는 HTMLPurifier를 살펴 보십시오 )
- 심층 방어
- 데이터를 노출시키지 마십시오
이 주제에 관한 작지만 좋은 책이 있습니다 : Chris Shiflett의 필수 PHP 보안 .
필수 PHP 보안 http://shiflett.org/images/essential-php-security-small.png
이 책의 홈 페이지에는 흥미로운 코드 예제와 샘플 장이 있습니다.
여기에 설명 된 위에서 설명한 기술 (IP 및 UserAgent)을 사용할 수 있습니다. 신원 도용 방지 방법
답변
필자는 PHP 6에서 해결되는 주요 문제 중 하나가 register_globals라고 생각합니다. 현재 피하는 데 사용되는 표준 방법 중 하나 register_globals
는 $_REQUEST
, $_GET
또는 $_POST
배열 을 사용하는 것 입니다.
이를 수행하는 “올바른”방법 (5.2에서는 현재 약간 버그가 있지만 조만간 6에서는 안정적 임)은 필터를 통하는 것 입니다.
따라서 대신 :
$username = $_POST["username"];
당신은 할 것입니다 :
$username = filter_input(INPUT_POST, 'username', FILTER_SANITIZE_STRING);
또는 심지어 :
$username = filter_input(INPUT_POST, 'username');
답변
이 세션 수정 보고서 에는 공격이 올 수있는 매우 유용한 정보가 있습니다. Wikipedia의 세션 수정 페이지 도 참조하십시오 .
답변
내 경험상 IP 주소를 사용하는 것이 가장 좋은 아이디어는 아닙니다. 예를 들어; 내 사무실에는 부하에 따라 사용되는 두 개의 IP 주소가 있으며 IP 주소를 사용하여 계속 문제가 발생합니다.
대신 서버의 도메인에 대한 별도의 데이터베이스에 세션을 저장하기로 선택했습니다. 이렇게하면 파일 시스템의 어느 누구도 해당 세션 정보에 액세스 할 수 없습니다. 이것은 3.0 이전의 phpBB에서 실제로 도움이되었지만 (이를 수정 한 이후) 여전히 좋은 생각입니다.
답변
이것은 매우 사소하고 명백하지만 모든 사용 후에 는 session_destroy 해야 합니다. 사용자가 명시 적으로 로그 아웃하지 않으면 구현하기 어려울 수 있으므로이를 수행하도록 타이머를 설정할 수 있습니다.
다음은 setTimer () 및 clearTimer ()에 대한 유용한 자습서 입니다.