В документации Python 2.7 для SimpleXMLRPCServer следующий код устанавливает сервер:
from SimpleXMLRPCServer import SimpleXMLRPCServer
from SimpleXMLRPCServer import SimpleXMLRPCRequestHandler
# Restrict to a particular path.
class RequestHandler(SimpleXMLRPCRequestHandler):
rpc_paths = ('/RPC2',)
# Create server
server = SimpleXMLRPCServer(("localhost", 8000),
requestHandler=RequestHandler)
server.register_introspection_functions()
# Register pow() function; this will use the value of
# pow.__name__ as the name, which is just 'pow'.
server.register_function(pow)
# Register a function under a different name
def adder_function(x,y):
return x + y
server.register_function(adder_function, 'add')
# Register an instance; all the methods of the instance are
# published as XML-RPC methods (in this case, just 'div').
class MyFuncs:
def div(self, x, y):
return x // y
server.register_instance(MyFuncs())
# Run the server's main loop
server.serve_forever()
Я читал, что XMLRPC-сервер Python может быть уязвимым для некоторых атак XML , в частности, "миллиард смеха", "квадратичный взрыв" и "декомпрессионная бомба". Является ли образец кода из документации уязвимым для этих атак и необходимы ли дополнительные средства для его защиты от этих уязвимостей? Я моделирую некоторый клиент-серверный код после этого примера кода и задаюсь вопросом, насколько уязвим SimpleXMLRPCServer. Если этот пример кода уязвим, я думаю, мне нужно будет что-то сделать и в моем приложении.
EDIT:
Это то, что я реализовал, чтобы устранить уязвимость XML. Правильно ли это, и все ли это необходимо для защиты кода примера?
from SimpleXMLRPCServer import SimpleXMLRPCServer
from SimpleXMLRPCServer import SimpleXMLRPCRequestHandler
from defusedxml.xmlrpc import monkey_patch # Protects against XML vulnerabilities. See https://docs.python.org/2/library/xml.html
monkey_patch()
# Rest of code is the same as above