2010-03-21 3 views
4

나는 PHP 취업 면접을 갔다. 방문자를 탐지 할 수있는 코드를 구현하라는 메시지가 웹 사이트를 통해 크롤링하고 콘텐츠를 도용하는 로봇이었다.PHP 응용 프로그램 변수 ... 어쩌면?

그래서 사이트를 새로 고치거나 지나치게 빨리 방문했는지/마지막으로 방문한 시간 소인을 저장하기 위해 세션 변수를 사용하여 몇 줄의 코드를 구현했습니다.

쿠키 등으로 세션 varaibles를 관리 할 수 ​​있다고 들었으므로 방문객 IP에 대한 타임 스탬프 정보를 저장하는 데 사용할 수있는 응용 프로그램 변수가 있는지 궁금합니다. 예를 들어 $ _SERVER [REMOTE_ADDR]입니까?

데이터를 파일에 쓸 수는 있지만 트래픽이 많은 웹 사이트에는 적합하지 않습니다. 한마디로

감사

제임스

+2

나는 뭔가를 놓칠지도 모르지만, 당신의 제목의 의미는 나를 벗어난다. –

답변

4

나는 고객이 자신의 취향에 세션 변수를 편집 할 수 없습니다,

그냥 명확하게하기 위해, 그 세션 한다거나 할이 등 쿠키에 의해 manupilated 수 있습니다 말했다되었다. 그러나 다른 세션을 허용하는 PHPSESSID는 삭제하거나 변경할 수 있습니다. 전역 변수 (예 : $_SERVER)는 영구적이지 않으므로 변경하면 모든 페이지가로드되지 않습니다.

크롤러를 탐지하는 가장 좋은 방법은 모든 페이지로드의 IP 주소, 사용자 에이전트 및 타임 스탬프를 데이터베이스에 저장하는 것입니다. 오버 헤드가 매우 적습니다.

+0

세션 아이디가 URL에 포함되어 있으면 세션이 해킹 당할 수 있습니다. –

+0

그러나 클라이언트는 쿠키를 허용하지 않아 쿠키 기반 세션의 사용을 방해합니다. 그러나 IP 기반 세션은 약간 더 안정적이어야합니다. –

+0

클라이언트 * 쿠키를 보낼지 여부와 보낼 쿠키를 선택하십시오. 그것이 요점입니다. 그러나 – cletus

1

을, 아니. 귀하의 옵션은 쿠키, 세션 바 (일명 서버 측 쿠키) 및 스토리지 (파일/db)입니다.

+1

세션 vars/서버 측 쿠키 ?? 그러면 사용자는 어떻게 식별됩니까? (서버가로드 할 세션을 알 수 있도록). 이것이 바로 클라이언트 측 쿠키의 요점입니다. – mpen

0

봇은 세션 변수를 다시 전달하지 않는 것처럼 쿠키 데이터 저장을 무시할 수 있습니다. 가장 좋은 방법은 일종의 외부 DB 또는 스토리지 시스템을 사용하는 것입니다. 단순히 IP를 저장하고 최근 연결을 비교하는 C++ 소켓 프로그램과 같습니다.

1

가장 좋은 방법은 로그를 사실상 분석하는 것일 수 있습니다. 즉각적인 콘텐츠 절도를 막지는 못하지만, 악용 사례 패턴을 찾아 미래의 액세스로부터 해당 IP를 차단하는 것이 훨씬 쉬울 것입니다.

1

서버 및 타임 스탬프를 저장해야합니다. 봇이 쿠키를 보낼 가능성은 없으며 URL 기반 세션조차도 신뢰할 수 없습니다.

당신이 당신을 죽일 플랫 파일 로깅을하고 있지 않다면 파일의 오버 헤드가 너무 커야합니다. 작은 속도 향상을 위해 메모리 기반의 파일 시스템에 저장되어있는 SQLite 또는 유사한 것을 사용할 수 있습니다. 아니면 memcached와 같은 것으로 갈 수도 있습니다. 데이터를 유지해야하는 경우 MySQL을 사용하십시오. 본격적인 데이터베이스의 오버 헤드는 거의 아무것도 할 PHP 걸리는 시간과 비교할 때 거의 아무것도 아닙니다.

세션에서 이와 같은 작업을 실제로하고 싶다면 세션에 정의 된 "동의 함"변수가없는 한 사용자 계약 페이지를 표시하십시오. 그렇게하면 봇이 유효한 세션을 다시 보내지 않으면 얻을 수있는 것은 모두 사용자 계약입니다. 그렇다면 세션 변수를 사용하여 추적 할 수 있습니다.

요청 사이의 클라이언트 상태를 기억할 필요가 없으며 대부분의 사용자 지정 대안보다 많은 오버 헤드가 발생하지 않으므로 세션 기반 솔루션이 필요하지 않습니다.

쿠키로 세션 변수를 조작 할 수 있다는 진술에 대해서는 완전히 사실이 아닙니다. 그러나 register_globals을 바보로 남겨두고 전역 변수를 요청하는 것이 바보라면 세션, 쿠키, 쿼리 문자열, 환경 중 어디에서 온 것인지 추측 할 필요가 없습니다. 이전에 정의되지 않았습니다. 물론 $ _SESSION을 통해 명시 적으로 액세스하는 경우에는 문제가되지 않습니다.

0

새로 고침 만하면 패배 할 것으로 예상하지 마십시오. 나는 스팸을 막기 위해 스팸 메일과 매우 유사한 것을 시도해 보았고 일부 봇은 다음 행동을 취하기 전에 사람들만큼 기다렸다.

나는 html 문서를로드하는 IP 주소를 더 많이 보며 파비콘, CSS 스타일 시트 등을 무시합니다. PHP를 구문 분석하기 위해 CSS 파일을 설정하면 IP가 보인다는 논리를 그 안에 넣을 수 있습니다 합법. 캐싱에주의하십시오.

또한 Google 봇과 같은 합법적 인 로봇을 잠그지 않도록 조치를 취하고 있습니까?

관련 문제