From 6e4653cf5030b9641fdb33e1bf429a3eb007d911 Mon Sep 17 00:00:00 2001 From: orbiter Date: Tue, 14 Sep 2010 12:38:05 +0000 Subject: [PATCH] remove DoS protection in remote search for intranet hosts git-svn-id: https://svn.berlios.de/svnroot/repos/yacy/trunk@7144 6c8d7289-2bf4-0310-a012-ef5d649a1542 --- htroot/yacy/search.java | 38 +++++++++++++++++++++----------------- 1 file changed, 21 insertions(+), 17 deletions(-) diff --git a/htroot/yacy/search.java b/htroot/yacy/search.java index f6af907b3..83fb84561 100644 --- a/htroot/yacy/search.java +++ b/htroot/yacy/search.java @@ -36,6 +36,7 @@ import java.util.TreeMap; import java.util.TreeSet; import net.yacy.cora.document.RSSMessage; +import net.yacy.cora.protocol.Domains; import net.yacy.cora.protocol.HeaderFramework; import net.yacy.cora.protocol.RequestHeader; import net.yacy.cora.storage.WeakPriorityBlockingQueue.ReverseElement; @@ -145,28 +146,31 @@ public final class search { // check the search tracker TreeSet trackerHandles = sb.remoteSearchTracker.get(client); - if (trackerHandles == null) trackerHandles = new TreeSet(); - boolean block = false; - synchronized (trackerHandles) { - if (trackerHandles.tailSet(Long.valueOf(System.currentTimeMillis() - 3000)).size() > 1) { - block = true; - } - if (trackerHandles.tailSet(Long.valueOf(System.currentTimeMillis() - 60000)).size() > 12) { - block = true; + if (!Domains.isLocal(client)) { + if (trackerHandles == null) trackerHandles = new TreeSet(); + boolean block = false; + synchronized (trackerHandles) { + if (trackerHandles.tailSet(Long.valueOf(System.currentTimeMillis() - 3000)).size() > 1) { + block = true; + } + if (trackerHandles.tailSet(Long.valueOf(System.currentTimeMillis() - 60000)).size() > 12) { + block = true; + } + if (trackerHandles.tailSet(Long.valueOf(System.currentTimeMillis() - 600000)).size() > 36) { + block = true; + } } - if (trackerHandles.tailSet(Long.valueOf(System.currentTimeMillis() - 600000)).size() > 36) { - block = true; + if (block) { + prop.put("links", ""); + prop.put("linkcount", "0"); + prop.put("references", ""); + prop.put("searchtime", "0"); + return prop; } } - if (block) { - prop.put("links", ""); - prop.put("linkcount", "0"); - prop.put("references", ""); - return prop; - } // tell all threads to do nothing for a specific time - sb.intermissionAllThreads(500); + sb.intermissionAllThreads(100); EventTracker.delete(EventTracker.EClass.SEARCH); final HandleSet abstractSet = ((abstracts.length() == 0) || (abstracts.equals("auto"))) ? null : QueryParams.hashes2Set(abstracts);