無名小站的 XSS 安全漏洞提到XSS所造成的嚴重問題。裡頭有一個例子-Cross-Site Scripting Worm Floods MySpace -談到有個名為Samy的人利用XSS,讓自己在一天之內變成Myspace的名人,成為超過一百萬人的好友,還讓Myspace被迫關站。我翻閱了slashdot這篇文章的回應和相關文章,發現裡頭有一點在Gea-Suan Lin’s BLOG完全沒提到,就是XSS蠕蟲的作者Samy利用了MS IE瀏覽器允許某些不合法的HTML標籤也能正常的辨認這項優點(應該算是優點,因為它可以讓你觀看不合法的網頁),巧妙地將一個Javascript標籤隱藏在CSS標籤中。這樣可以躲過Myspace對於Javascript的過濾檢查,Myspace不允許使用者寫入Javascript到網頁中。雖然它理論上是一個不知所云的CSS標籤,但是MS IE卻會執行藏於其中的Javascript程式碼。再加上XMLHTTP和cookie的幫助,Samy的好友以一傳十、十傳百的方式暴增,最後因為太多人瀏覽該網站而使得它被迫關站。注意Samy的XSS蠕蟲必須要有一個條件,就是網站的過濾器對於合法標籤的標準和瀏覽器的不一樣。Myspace的過濾器對於合法性採取較嚴格的標準,而MS IE則採取較寬鬆的標準(其實也是不合乎W3C的標準)。原本在W3C的標準中應該被視為不知所云的CSS標籤,在MS IE中卻成了一段Javascript程式,結果造成了可怕的後果。這件事提醒了我們,遵守網頁標準其實是有助於網路安全的。Myspace為了防止類似的情形再度發生,大概會採取更為寬鬆的標準,以逮到更多危險的Javascript程式碼。如果它真的這麼做,等於是承認了MS IE才是網頁的標準,而不是W3C。不過使用者的壓力應該會迫使它這麼做,因為一般人不會承認自己選擇了一個錯誤的瀏覽器,只會怪Myspace沒做好網站的安全工作。如此倒果為因,只能說是迫於網路的現實。
其實這不只是MS IE的問題,其他瀏覽器或多或少都會允許一些不合法的標籤。這是因為當初WWW開始風行之後,原本只在學術界流傳的WWW,頓時成為大眾的焦點,也因此引來了為數眾多的開發者。這些人不具有電腦的技術背景,也由於當時缺乏編輯HTML的軟體,難免會輸入一些錯誤的語法-例如省略小於和大於等特殊符號。瀏覽器為了推廣WWW起見,乾脆支援這些錯誤的語法。起初是達到快速推廣的目的,因為它讓一般人加入創造WWW的行列。雖然之後的瀏覽器也可以支援更嚴格的W3C標準語法,但是為了和一大堆網站保持相容,只好繼續縱容這些錯誤。不過終於有人發現可以利用這些漏洞,把一些程式碼植入一些受歡迎的網站,如此惡夢就開始了。人們開始嘗到當初草率決定的嚴重後果。目前的情況如果不趕緊想一些辦法解決,任其惡化下去,到最後可能會迫使很多人不再逛網站,造成WWW的空前危機。最好的解決方法似乎是,大家趕緊遵守W3C的標準,網站可以很容易地過濾惡意程式碼,一般人也不容易遭到這些程式的攻擊。
但是如果仔細想想,目前問題來自於一個更深層的錯誤,就是根本不應該採取文字格式,網路應該二進位化。人們之所以會採取文字格式,是因為它可以直接被人所閱讀和編輯。但是一旦人的因素加入之後,就會產生導因於人的問題。人和機器不同,人的語言允許冗餘性和不精確性,機器則不然。就以HTML標籤來說,少一個小於的符號,人們還是認為它是合法的,這是人們認為小於加大於符號是多餘的,只要其中一個就可以了。但是機器卻無法辨認,因為他違反標準語法。遇到這種問題,在專業的程式領域中,編譯器偶而會允許不合法的語法,不過很少這樣。不過像WWW這種大眾的領域,瀏覽器會傾向容許這些錯誤,因為網站開發者的水準普遍不足。如此一來,就算一夜之間,大家都遵守標準開發網站,這些問題終究還是會再出現。因為網路技術日新月異,只要新技術還是用文字格式,就難免遭受人們的摧殘,變得面目全非。況且我之前說過,使用文字檔是英文沙文主義,對於其他語言的使用者來說,英文和數字完全一樣難記。只使用英文的結果,是阻礙了世界絕大多數不使用英文的人的貢獻。使用二進位,可以避免英文沙文主義之外,更可以做到完全無冗餘性,無法增減半分。已經有一個非常成功的例子,eDonkey和eMule如此成功,成為最大的P2P網路,它們的協定就是使用二進位格式,因為原始開發者都是德國人。別忘了德文和英文還有高度的相關性,他們都選擇了二進位,更何況世界上其他跟英文相差十萬八千里的各式各樣語言的使用者不該選擇二進位嗎?
註:XSS或許又給了我一個關閉本Blog所有回應的理由,至少逛我網站的人不會遭到Javascript的攻擊,不是嗎?



