2017-12-24 17 views
2

홍수 제한이있는 사용자를 괴롭히지 않고 자동 검색을하는 봇을 차단하는 가장 좋은 방법은 무엇입니까? 무슨 일너무 많은 요청으로 사이트 검색과 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).

+0

157.55.39. *를 감지하여 차단 한 다음 가장 적절한 응답은 무엇입니까? HTTP 503 또는 400? –

+0

괜찮은 스크래퍼에게 검색 경로를 사용하지 말라는 robots.txt가 없습니까? – rene

+0

쿠키에 홍수 제한 데이터를 저장하려고 시도 했습니까? 사촌 그것은 매우 어리석은 해결책입니다, 그들은 쿠키를 저장/사용하지 않습니다. 아주 쉬운 해결책은 MemCached를 사용하여 이러한 데이터를 저장하는 것이지만, 프로젝트의 크기 (로드)에 크게 의존합니다. p.s. Robots.txt를 통해 검색 엔진 규칙을 변경할 수도 있습니다. –

답변

1

스팸은 모든 웹 사이트 소유자가 처리해야하는 문제입니다.
아주 쉬운 방법부터 시작하여 매우 강력하고 강력한 보호 메커니즘을 사용하여 좋은 보호 기능을 구축하는 데는 여러 가지 방법이 있습니다.

하지만 지금 당장은 간단한 해결책이 하나 있습니다.
robots.txt를 사용하고 Bing 스파이더가 검색 페이지를 크롤링하지 못하도록합니다.
very easy 할 수 있습니다.

귀하의 의 robots.txt 파일과 같습니다

User-agent: bingbot 
Disallow: /search.html?q= 

그러나 이것은 완전히 검색 결과를 크롤링 검색 엔진 거미를 차단합니다.
당신이 바로 그러한 요청을 제한 할 수 있지만, 그들을 완전히 차단되지 않은 경우,이 시도 :

User-agent: bingbot 
crawl-delay: 10 

에만 매 10 초마다 웹 사이트 페이지를 크롤링 빙을 강제 할 것이다.
그런 지연으로 인해 하루에 8,640 페이지 (하루에 매우 적은 양의 요청) 만 크롤링합니다.
이걸 잘하면 괜찮아.

하지만, 당신이 수동으로 웹 크롤러에서뿐만 아니라 해커로부터뿐만 아니라 탐색 양식을 보호, 서버 자체로이 동작을 제어하려면?
쉽게/시간당 50,000 건 이상의 요청을 서버에 보낼 수 있습니다.

이 경우 2 가지 해결책을 권합니다.
처음으로, CloudFlare를 웹 사이트에 연결하고 ViewDNS IP History과 같은 서비스를 통해 서버의 실제 IP를 계속 사용할 수 있는지 확인하는 것을 잊지 마십시오.
활성 서버 IP가 기록에 표시되면이를 변경하는 것이 좋습니다 (권장 사항).

둘째 인 경우 MemCached을 사용하여 플러드 데이터를 저장하고 특정 IP가 너무 많이 쿼리하는 경우 (즉 30 q/분)를 감지 할 수 있습니다.
만약 그렇다면 얼마 동안 perform (MemCached를 통해)을 사용할 수있는 기회를 차단하십시오.

물론 이것은 사용할 수있는 최상의 솔루션은 아니지만 작동하고 서버 비용이 많이 들지는 않습니다.

+0

감사합니다. 전반적으로 이것이 내 문제를 해결합니다. 나는 bing이 google과 같은 URL 매개 변수를 무시하는 것처럼 보인다고 덧붙이고 싶습니다. 그러면 무시할 "q"를 추가 할 수 있습니다. 그러나 Disallow : /search.html?q= 나는 몰랐고, 이것이 나를 완벽하게 도와 줄 것입니다. –

+0

도와 줘서 기쁩니다. 해결책이있는 경우 대답을 수락하십시오. –

+0

그래서 약간 수정했습니다 :'Disallow :/*? q = * Disallow :/*? * q = *'이것은 가능한 모든 q 매개 변수를 차단합니다. –