【发布时间】:2011-08-08 05:51:11
【问题描述】:
我在 python 中制作了一组 XMLRPC 客户端-服务器程序,并设置了一个小方法来验证我的客户端。然而,在编写了几乎整个代码之后,我意识到一旦客户端通过身份验证,我为它设置的标志在我的班级中是全局的,即只要一个客户端通过身份验证,所有客户端都通过身份验证。我不知道为什么,但我的印象是,每当客户端连接到 SimpleXMLRPCServer 时,它都会在我的程序中创建一组新的变量。
基本上现在的设置方式是
class someclass:
authenticate(self, username, pass):
#do something here
if(check_for_authentication(username, pass))
self.authenticated=True
other_action(self, vars):
if authenticated:
#do whatever
else:
return "Not authorized."
server=SimpleXMLRPCServer.SimpleXMLRPCServer("0.0.0.0", 8000)
server.register_instance(someclass())
server.serve_forever()
我需要一种方法来破解我正在寻找的内容(即需要为每个连接的客户端设置经过身份验证的标志),或者另一种可以更轻松地做到这一点的协议。经过一番搜索,我一直在看twisted,但既然已经写好了,我宁愿修改它也不愿重写它。我现在知道我总是可以从客户端获取用户名和密码,但是在资源方面(必须对每个请求进行身份验证)和节省带宽(我的一些客户的数量非常有限),我会而不是那样做。
另外,这是我第一次尝试保护这样的东西(而且我没有接受过互联网安全方面的培训),所以如果我忽略了我的逻辑中的一些明显错误,请告诉我。基本上,我不能让人在“other_actions”中向我发送虚假变量
【问题讨论】:
-
你在那里做的方式,认证变量是实例的本地变量,而不是类,假设你只在实例方法中声明/使用
authenticated。如果不是这种情况,您需要更新您的代码,以向我们展示是什么让经过身份验证的属于类而不是实例。 -
我稍微改了一下,但我不希望变量属于实例吗?我现在遇到的问题是每次连接到服务器时我都没有创建对象的新实例,这几乎是我想要的。或者也许为每次调用创建一个新线程,使用它自己的身份验证变量。
-
你知道如果你考虑过使用像 twisted 这样的框架,这不是问题
-
是的,在做了一点压力测试之后,即使每 1/10 秒发送一个事件有时也会给我带来错误。我认为这根本不是我想要使用的协议。
标签: python multithreading xml-rpc