홍수 제한이있는 사용자를 괴롭히지 않고 자동 검색을하는 봇을 차단하는 가장 좋은 방법은 무엇입니까? 무슨 일너무 많은 요청으로 사이트 검색과 SQL 넘침을 사용하는 로봇을 어떻게 다룰 수 있습니까?
:
I 나는 이상한 검색 행동을 더 잘 알게되고 나는 마침내 누구 잡을 시간이 있었다. 빙 (Bing)이라고도 알려진 157.55.39. *입니다. 이는 _GET [ 'q']이 감지 될 때 noindex가 추가되기 때문에 이상합니다.
문제는 그러나 요청이 너무 많은 경우가오고있는 한 그들은, SQL 서버를 둔화되어있다
내가 지금까지했던 어떤 :.
내가 구현 한 검색을 홍수 한도. 하지만 세션 쿠키를 사용하여 마지막 검색 타임 스탬프에서 확인하고 계산 한 결과 - 빙은 분명히 쿠키를 무시하고 계속합니다.
최악의 시나리오는 reCAPTHA를 추가하는 것이지만 나는 "Are you human?" 당신이 검색 할 때마다 tickbox. 홍수가 감지되었을 때만 나타나야합니다. 그러니까 기본적으로, 진짜 문제는 어떻게
편집 # 1 .. 요청을 중지 reCAPTCHA를 일종의 트리거하기 위해 클라이언트에서 너무 많은 요청을 감지하는 것입니다
내가 함께, 현재 상황을 처리 :
<?
# Get end IP
define('CLIENT_IP', (filter_var(@$_SERVER['HTTP_X_FORWARDED_IP'], FILTER_VALIDATE_IP) ? @$_SERVER['HTTP_X_FORWARDED_IP'] : (filter_var(@$_SERVER['HTTP_X_FORWARDED_FOR'], FILTER_VALIDATE_IP) ? @$_SERVER['HTTP_X_FORWARDED_FOR'] : $_SERVER['REMOTE_ADDR'])));
# Detect BING:
if (substr(CLIENT_IP, 0, strrpos(CLIENT_IP, '.')) == '157.55.39') {
# Tell them not right now:
Header('HTTP/1.1 503 Service Temporarily Unavailable');
# ..and block the request
die();
}
작동합니다. 그러나 그것은 좀 더 체계적인 문제에 대한 또 다른 일시적인 해결책으로 보인다.
Bing의 indexing/search.html과 같은 검색 엔진을 사용하고 싶습니다. 실제로 검색하지 않기를 바랍니다. "최신 검색"또는 그와 유사한 것이 없으므로 쿼리를 받고있는 곳의 신비가됩니다.
편집 # 2 - 미래에 다른 사람이 이러한 문제를 가지고 있다면 나는 그것을
를 해결하는 방법, 도움이 되었기를 바랍니다.
우선 Bing에는 Google과 동일한 URL 매개 변수 기능이 있습니다. 그래서 Bing에게 URL 매개 변수 "q"를 무시하도록 말할 수있었습니다. 정답을 바탕으로
, 나는 robots.txt에에 매개 변수 Q에 대한 해제하면 행을 추가 : 나는 또한 피크 트래픽에 우리를 귀찮게하지 않는, 빙 웹 마스터 콘솔 내부에 말했다Disallow: /*?q=*
Disallow: /*?*q=*
.
전반적으로이 부분은 서버 리소스 사용량에서 긍정적 인 피드백을 보였습니다. 그러나 동일한 쿼리에 대한 전반적인 플러드 제한을 구현할 것입니다. 특히 _GET이 관련된 부분이 그렇습니다. 따라서 Bing이 AJAX 호출을 방문하기로 결정해야하는 경우 (예 :? action = upvote & postid = 1).
157.55.39. *를 감지하여 차단 한 다음 가장 적절한 응답은 무엇입니까? HTTP 503 또는 400? –
괜찮은 스크래퍼에게 검색 경로를 사용하지 말라는 robots.txt가 없습니까? – rene
쿠키에 홍수 제한 데이터를 저장하려고 시도 했습니까? 사촌 그것은 매우 어리석은 해결책입니다, 그들은 쿠키를 저장/사용하지 않습니다. 아주 쉬운 해결책은 MemCached를 사용하여 이러한 데이터를 저장하는 것이지만, 프로젝트의 크기 (로드)에 크게 의존합니다. p.s. Robots.txt를 통해 검색 엔진 규칙을 변경할 수도 있습니다. –