What is this "<!–[O]–><script>document.write(…" mysterious code block in some web sites’ source code?
August 5th, 2007
I must warn you to not use Internet Explorer while you are reading this post.
Your computer might get infected by a computer virus otherwise! If you are paranoid you can disable JavaScript in your browser too.
If you are not using Internet Explorer (or Maxthon) you can go on reading.
It is a long line of JavaScript code that some web sites’ HTML source code contains.
It can be found at the top or bottom of the HTML source code.
I’ve created a screen shot to show you how it looks like.
Do you know what it is?
It is a malicious JavaScript code that exploits Internet Explorer’s buffer overflow vulnerability.
Microsoft Internet Explorer (IE) contains a buffer overflow vulnerability
that can be exploited to execute arbitrary code with the privileges of the user running IE.
The special JavaScript code tries to execute a binary code, a trojan virus.
Your computer gets infected immediately by a trojan virus, such as Win32/Spy.Delf.NEY,
when you visit such "infected" web site with Internet Explorer on Windows XP SP1.
Other browsers might crash or close themselves. Firefox for instance immediately terminates itself when you visit such page.
How do web sites get infected?
At first, I believed the files on the server are modified by a vulnerable CMS or blog engine. That’s not true.
It is the infected computer that injects the malicious code into all files on the root of the web server without the knowledge of the user, of course.
When your computer is infected the virus tries to steal passwords from your computer to FTP servers.
It is confirmed that the virus can easily steal all FTP passwords from Total Commander’s configuration file, as the
passwords are not encrypted (maybe encrypted but the encryption is too weak).
Many web developers, including me, use Total Commander.
Although it is not advised to store passwords, we do it because we are too lazy to type the password all the time.
What to do when your computer or web site is infected by such trojan
- Do not panic! It cannot be worse.
- Remove the virus from your computer (the best would be to restore the system partition from an archive).
The second preferred option is to remove the virus with an antivirus. Make sure you disconnect your computer from the internet when you are doing it. - If your computer is clean, remove the stored passwords from Total Commander
- Now you need to check all your web sites one by one if they are not infected. Do not use Internet Explorer, your computer might catch the infection again.
Download all the files of your websites via FTP and search for the malicious JavaScript code. You can use Total Commander’s "Find Files" feature (ALT-F7) for this.
You will be looking up all files that contain the special string<!--[O]--><script>document.write(unescape.
If you found infected files, remove the JavaScript code from them. Then you can upload the modified files back to the server. - Now you need to change all your FTP passwords as the virus might have sent them to someone else.
- Last but not least you should update your browser.
- There is something else. Maybe you should notify your web site’s visitors about the infection ;)
It can be very embarrassing if your website is infected with such code. You might receive a few unfriendly e-mails from some visitors, customers.
The worst thing is that you can loose many visitor or customers. Your website can easily loose the trust and good name in a few hours or days.
The sooner you detect and resolve the infection the better. As an example, here are two links to infected web sites:
novepc.sk, webtest.sk. The first is
an online store selling computer hardware and the latter is a website collecting some of the most beautiful Slovak and Czech websites.
It is visited especially by web designers (Total Commander is very popular in Slovakia, too ;)).
Further reading
Look at the screen shot below. It is a project posted on a popular web site where you can find freelancers for your projects or vice versa.
Well, (some) programmers are really optimistic.

XML (eXtensible Markup Language) bevezető II. rész
July 13th, 2007
Az első rész folytatása következik.
XML dokumentum logikai szerkezete
Egy XML dokumentum tartalma különböző összetevőkre bontható. XML-ben ezeket az összetevőket elemnek (element) nevezik.
Minden elem egy logikai részét jelöli a dokumentumnak, és tartalmazhat további elemeket, karaktereket (character data). Van egy elem, ami mindegyik másikat tartalmazza, ezt gyökér-elemnek (root-element) vagy dokumentum-elemnek (document-element) nevezik. Ezt a hierarchikus szerkezetet fa-szerkezetnek (tree) is nevezik, bár az elemek között lehetséges egyéb kapcsolatok (linkek) miatt inkább gráfról lehet beszélni.
Minden elemnek van típusa (neve), illetve lehet még nulla vagy több attribútuma (attribute). Az attribútumok az elemre vonatkozó tulajdonságokat tárolhatják.

XML dokumentum fizikai szerkezete (entity)
Az XML specifikáció lehetővé teszi az XML dokumentum több részre osztását. Ezeknek az egységeknek az angol neve „entity”. A dokumentum entity kivételével minden egyes entity névvel van ellátva, hogy nevük alapján hivatkozhassunk rájuk (entity reference). Egy entity lehet egy szöveg vagy egy karakter, vagy lehet akár egy egész fejezet egy könyvben, amely egy külsõ fájlban van tárolva. Az ilyen külsõ egységeket (external entity) az XML feldolgozó programok (XML processor) ismét karakterek sorozatává alakítják.
Mielőtt egy entity-re hivatkoznánk, deklarálni kell a dokumentum típus deklarációban:
a deklarációt követően a dokumentumon belül akárhányszor hivatkozhatunk rá:
Minden XML feldolgozó a következő beépített entity-ket tartalmazza (built-in entities):
| hivatkozás | értéke |
|---|---|
| < | < |
| > | &rt; |
| & | & |
| ' | ' |
| " | " |
Az entity-ket többnyire gyakran ismétlődő adatok egy külső központi fájlban tárolására használják. Így az esetleges módosítást csak egy helyen kell elvégezni. Hosszabb kifejezéseket egy rövidebb azonosítóval ellátva megkönnyítjük munkánkat, mivel a hosszú kifejezés helyett egy gyorsabban beírható rövid azonosítóval lehet rá hivatkozni.
Az egységeknek (entity) két fajtáját különböztetik meg attól függően, hogy a tartalma XML (parsed entity) vagy sem (unparsed entity vagy data entity).

Névtér (Namespace)
Vannak esetek, amikor egy XML dokumentum elemei egynél több nyelvtanból (DTD) származnak. Például az XSLT (lásd tovább) megkívánja, hogy az XSLT nyelv elemei mellett a cél dokumentum nyelvi elemei is szerepeljenek. Ebben az esetben az elemekről egyértelműen meg kell tudni mondani, hogy melyik nyelvből származnak. Mivel előfordulhat, hogy két különböző nyelvből származó elemnek ugyanaz lesz a neve, az elemek neve nem elég az egyértelmű azonosításukra. Ezt a problémát a namespace úgy oldja meg, hogy az elemek nevei elé egy prefixum kerül. A prefixum az adott névtér egyedi URI-je. A felhasznált névteret deklarálni kell.

XML feldolgozó
Az XML alkalmazások egyik legfontosabb kelléke az XML feldolgozó (XML processor). Az XML feldolgozó egy szoftver komponens, amely az alkalmazás és az XML fájl között helyezkedik el. Az XML feldolgozó egyik fontos része az adatfolyam elemző (parser), amely egy szabványos felületen (például W3C XML DOM) keresztül teszi elérhetővé az XML dokumentum szerkezetét, ami lényegesen megkönnyíti a programozók munkáját.
Az XML dokumentumok elérésére két szabványos API felület terjedt el:
- W3C XML DOM (Document Object Modell)
A DOM felépíti az XML adatfolyamnak megfelelő, objektumokból álló fát, aminek az elemeit ezután közvetlenül el lehet érni. Mivel az egész XML dokumentum struktúráját építi fel egyszerre a memóriában, hosszabb XML dokumentumok esetében jelentős memóriát vesz igénybe. Emiatt a DOM nem alkalmas nagyon nagy adattömegek feldolgozására. - SAX (Simple API for XML)
A SAX nem épít fel DOM szerkezetet, ugyanis itt az elemzés során mindíg csak az aktuális elem látható. A SAX emiatt nem teszi lehetővé az XML elemek közvetlen elérését, azokat csak sorosan olvassa fel, aminek következtében események generálódnak. Az elemző alkalmazás ezekre az eseményekre határozza meg az eseménykezelő metódusokat. A SAX nem olvassa be az egész XML dokumentumot a memóriába, így nagyobb adattömegek feldolgozására alkalmasabb, mint a DOM. A SAX egyelőre nem W3C ajánlás.
Az XML feldolgozó minden esetben ellenőrzi, hogy a beolvasott XML dokumentum helyesen formált-e (well-formed). Ha nem, akkor hibaüzenetet ad át az alkalmazásnak.
Egyes XML feldolgozók képesek az XML dokumentum érvényességét is vizsgálni, amennyiben az XML fájlhoz létezik valamilyen sémaleírás (DTD, XDR, XSD,..).
XML technológiák
Az XML megjelenése óta számos XML technológia jelent meg, amelyek gyakran előforduló XML-hez kapcsolódó problémákhoz nyújtanak segítséget.
- Xlink, Xpointer
A XLink és az XPointer hivatott felváltani a HTML egyszerű linkjét, összetettebb linkelési lehetőségeket kínálva. Az XLink különböző források – nem csak XML dokumentumok – címzését teszi lehetővé, míg az XPointer – az XPath segítségével, egy-két kiegészítéssel – az XML dokumentum egy részét címzi meg. - XDR (XML Data Reduced)
A Microsoft gyorsan lemondott a DTD használatáról, és gyors ütemben belekezdett egy XML formátumú sémaleíró nyelv kidolgozásába, amelyet a Word Wide Web konzorciumnak is elküldött szabványosításra. Amellett, hogy XML formátumú még jóval rugalmasabb is, mint a DTD. A DTD-ben leírt struktúrának maradéktalanul meg kell felelni egy XML dokumentumnak. Az XDR is tud ilyen szigorú lenni, de emellett azt is elő lehet írni, hogy az ellenőrizendő dokumentum egyes részeiben lehetnek további elemek is, amelyet a séma nem ír le.
Emellett az XDR bővíthető, azaz az igények megváltozásakor nem kell a sémát kidobni, csak egy másik névtér bevezetésével kiegészíteni a meglévőt. Utolsó, de nagyon fontos szolgáltatás az XDR-ben, hogy az elemek és attribútumoknak meg lehet adni a típusát (egész szám, karakter,..). - XSD, XML Schema Definition
- XPath (XML Path Language)
Az XPath XML dokumentumok részeinek címzésére szolgál, de tartalmaz néhány sztring alapműveletet is. Az XSLT és XPointer fejlesztések kapcsán hozták létre. A dokumentumot csomópontok (node-ok) halmazának tekinti. A node lehet bármilyen alkotórész: gyökérelem, elem, attribútum, karakteradat, névtér, feldolgozó utasítás, megjegyzés.

