network: harden against eclipse attacks
This commit is contained in:
@@ -476,20 +476,26 @@ class Network(Logger):
|
|||||||
|
|
||||||
@with_recent_servers_lock
|
@with_recent_servers_lock
|
||||||
def get_servers(self):
|
def get_servers(self):
|
||||||
# start with hardcoded servers
|
# note: order of sources when adding servers here is crucial!
|
||||||
out = dict(constants.net.DEFAULT_SERVERS) # copy
|
# don't let "server_peers" overwrite anything,
|
||||||
|
# otherwise main server can eclipse the client
|
||||||
|
out = dict()
|
||||||
|
# add servers received from main interface
|
||||||
|
server_peers = self.server_peers
|
||||||
|
if server_peers:
|
||||||
|
out.update(filter_version(server_peers.copy()))
|
||||||
|
# hardcoded servers
|
||||||
|
out.update(constants.net.DEFAULT_SERVERS)
|
||||||
# add recent servers
|
# add recent servers
|
||||||
for s in self.recent_servers:
|
for s in self.recent_servers:
|
||||||
try:
|
try:
|
||||||
host, port, protocol = deserialize_server(s)
|
host, port, protocol = deserialize_server(s)
|
||||||
except:
|
except:
|
||||||
continue
|
continue
|
||||||
if host not in out:
|
if host in out:
|
||||||
|
out[host].update({protocol: port})
|
||||||
|
else:
|
||||||
out[host] = {protocol: port}
|
out[host] = {protocol: port}
|
||||||
# add servers received from main interface
|
|
||||||
server_peers = self.server_peers
|
|
||||||
if server_peers:
|
|
||||||
out.update(filter_version(server_peers.copy()))
|
|
||||||
# potentially filter out some
|
# potentially filter out some
|
||||||
if self.config.get('noonion'):
|
if self.config.get('noonion'):
|
||||||
out = filter_noonion(out)
|
out = filter_noonion(out)
|
||||||
|
|||||||
Reference in New Issue
Block a user