Make generated stanza id truly random
Fix long-standing security issues where stanza @id be predictable. Signed-off-by: Maxime “pep” Buquet <pep@bouah.net>
This commit is contained in:
parent
4435c81d77
commit
b29bb30eb7
@ -340,6 +340,13 @@ class SlixTest(unittest.TestCase):
|
|||||||
self.xmpp.default_lang = None
|
self.xmpp.default_lang = None
|
||||||
self.xmpp.peer_default_lang = None
|
self.xmpp.peer_default_lang = None
|
||||||
|
|
||||||
|
def new_id():
|
||||||
|
self.xmpp._id += 1
|
||||||
|
return str(self.xmpp._id)
|
||||||
|
|
||||||
|
self.xmpp._id = 0
|
||||||
|
self.xmpp.new_id = new_id
|
||||||
|
|
||||||
# Must have the stream header ready for xmpp.process() to work.
|
# Must have the stream header ready for xmpp.process() to work.
|
||||||
if not header:
|
if not header:
|
||||||
header = self.xmpp.stream_header
|
header = self.xmpp.stream_header
|
||||||
|
@ -201,11 +201,6 @@ class XMLStream(asyncio.BaseProtocol):
|
|||||||
self.__event_handlers = {}
|
self.__event_handlers = {}
|
||||||
self.__filters = {'in': [], 'out': [], 'out_sync': []}
|
self.__filters = {'in': [], 'out': [], 'out_sync': []}
|
||||||
|
|
||||||
self._id = 0
|
|
||||||
|
|
||||||
#: We use an ID prefix to ensure that all ID values are unique.
|
|
||||||
self._id_prefix = '%s-' % uuid.uuid4()
|
|
||||||
|
|
||||||
# Current connection attempt (Future)
|
# Current connection attempt (Future)
|
||||||
self._current_connection_attempt = None
|
self._current_connection_attempt = None
|
||||||
|
|
||||||
@ -243,12 +238,7 @@ class XMLStream(asyncio.BaseProtocol):
|
|||||||
ID values. Using this method ensures that all new ID values
|
ID values. Using this method ensures that all new ID values
|
||||||
are unique in this stream.
|
are unique in this stream.
|
||||||
"""
|
"""
|
||||||
self._id += 1
|
return uuid.uuid4().hex
|
||||||
return self.get_id()
|
|
||||||
|
|
||||||
def get_id(self):
|
|
||||||
"""Return the current unique stream ID in hexadecimal form."""
|
|
||||||
return "%s%X" % (self._id_prefix, self._id)
|
|
||||||
|
|
||||||
def connect(self, host='', port=0, use_ssl=False,
|
def connect(self, host='', port=0, use_ssl=False,
|
||||||
force_starttls=True, disable_starttls=False):
|
force_starttls=True, disable_starttls=False):
|
||||||
|
Loading…
x
Reference in New Issue
Block a user