6.7 Ciekawostki
Rozdział zawiera ciekawostki dotyczące samego protokołu i jego poszczególnych elementów, które godne są odnotowania.
6.7.1 Inteligentny parser serwera
Parser XML serwera stwarza pozory inteligentnego, ciekawe, kto go implementował, może to jakaś autorska, ręczna robótka na char
, która operuje tylko na znakach <
, /
i >
?
Wysyłając do serwera niepoprawny składniowo pakiet autoryzacji:
<iq type="set" id="456C287C">
<query xmlns="jabber:iq:auth">
<username>malcom</juser>
<digest>aab5c5f9a3eea18023d99405509fea968ada18ec</dupa>
<resource>t</resource>
<host>tlen.pl</host>
</query>
</iq>
Jeśli pakiet ten zawiera poprawne dane autoryzacyjne, zostaniemy zalogowani do sieci.
Wysyłając na przykład wiadomość pakietem:
<message to="malcom@tlen.pl" type="chat">
<body>tresc</dupa123>
</dupa123>
Nasz odbiorca oczywiście wiadomość tą otrzyma.
Może serwer jest inteligentny i wie co chcieliśmy osiągnąć, mimo popełnionych przez nas błędów;)
Wygląda na to, że parser serwera, nie bierze pod uwagę nazw znaczników zamykających, bo przy próbie wysłania pakietu z błędami składniowymi znaków <
, /
i >
, na przykład pakietu:
<message to="malcom@tlen.pl" type="chat">
<body>tresc</body><
</message>
Otrzymamy informacje o błędnym XML-u:
<stream:error>Invalid XML</stream:error>
I serwer zerwie z nami połączenie.
Niedokładność i niedopracowanie parsera jest przyczyna różnych błędów. Niektóre z nich były wykorzystywane do niecnych celów.
Inny przykład, wysłanie pakietu o strukturze:
<m ni/>
<m af="omg" to="malcom@tlen.pl" type="chat">
<body>aaa</.>
</.>
Skutkuje u odbiorcy otrzymaniem:
<m niaf="omg" type="chat" f="malcom@tlen.pl">
<body>aaa</body>
</m>
Zaskakujący jest ten serwer :P
Wiele rożnych przykładów można byłoby tutaj przytoczyć, ale nie w tym rzecz.
Kiedyś, wysyłając pakiet z "odpowiednimi" błędami można było zresetować czaty tlenowe, a nawet rozłączyć "zdalnie" danego użytkownika z serwerem tlenu, wysyłając do niego odpowiednio spreparowany pakiet wiadomości.
Większość tych pojedynczych błędów poprawiono, ale widać, że parser serwera dalej zawiera rażące błędy i niedoróbki.