JavaScript Hijacking and How to

Tags: ajax javascript webdev 資安

日前 Fortify 發表了一份文件《Fortify Software Documents Pervasive and Critical Vulnerability in Web 2.0》,描述惡意網站如何透過瀏覽器取得基於 Ajax 及 JSON 規範傳遞之跨網域的隱密資料。它將此方式稱之為 JavaScript Hijacking 。詳細的 Hijacking 內容請至《JavaScript Hijacking Vulnerability Detected》下載文件。

本文將說明 JavaScript Hijacking 概念以及一個範例。

神與智慧設計說

Mark's 的《智慧設計》簡要地敘述了「智慧設計說 (Intelligent Design)」。然而,「智慧設計說」只從人的有限生命去看才成立。從信神者之觀點來看,智慧設計說也有問題,甚至可說它否定了神的智慧。

從人的觀點來看,幾千萬世代是漫長而不可能的事;但從神的觀點來看,幾千萬世代不過是眨眼之事。自「這個宇宙」創造以來,目前已知至少經過了140億年的時間,在這個宇宙中並創造了以人類目前計數系統而言可稱無限多的星體數。在這140億年的無限多星體數中,早已發生了『幾千萬次「幾千萬世代」』。容我提醒,「這個宇宙」也是在『幾千萬次「幾千萬世代」』的無限多宇宙中的其中一個罷了。

最後,以人的立場問神,為什麼大能全知的神,以衪的智慧卻只在地球這個小地方設計了不完美的人。光憑這點,就足以視「智慧設計說」否定了神的智慧。我個人反倒以為演化論是一種更高的智慧表現。

人–也就是我們–憑什麼認為我們是神所創造出一枝獨秀、為神所鍾愛及眷顧的物種呢?我們應該要更謙卑地看待自己:人只是萬物之一。

一天兩篇,談演化與智慧設計

演化論者並不否認智慧,但智慧設計有其限度,甚至也是演化論中的一個實例。

在經濟學中,有個「有限理性」的說法。我們確實有能力進行智慧設計,但有限度,極有限度。其限度不能超出個人行為與選擇。這又如同「性擇」於演化論中之地位,性擇是個體有意識、有目的的行為調整,但這樣的改變仍然要經過環境及個體間互動才能決定其存續。經濟學中對有限理性與完全理性、超級智慧之討論也是相當深入的。

PHP mail() and charset encoding question

不知從何時開始, PHP 內建的 mail() 行為改變了,使用 mail() 寄發電子郵件時,似乎會固定將內文之字元編碼轉為 iso-8859-1 字元集。於是用 mail() 寄中文郵件時變亂碼、寄東歐文字郵件時變亂碼、寄日文郵件時變亂碼等等問題一一出現。如何寄非英文語系郵件幾乎成了 FAQ 級問題。

釘丁戶問題,中共落實物權法的頭關

中共自從改革開放後,地方政府為了促進開發,多與開發商合作,由開發商規劃土地用途及興建建物。在此過程中,地方政府以補償拆遷方式處理開發土地之原有住戶。然而在拆遷過程中每多發生住戶因補償不公而抗爭保地之事 (人民政府要徵地,人民要抗爭)。 「釘子戶」即為土地開發過程中出現的抵制戶。

TWPUG問答 - 如何不將 PDF 回傳給瀏覽器後列印,而直接由印表機印出

請問 PDF 可以不要顯示在瀏覽器上面,而是直接按下列印鈕(列印)後,直接由印表機印出嗎?
Taiwan PHP User Group所見問題

可以,但不要忘了 PHP 是在 server 端執行,所以 PHP 將使用 server 端設定的印表機輸出列印資料。請把設計思維整個切換到 client-server 架構,然後想想你的軟體運作環境是否方便從 server 端的印表機輸出資料。如果是公司內部那就可以,因為公司內部大部份是將資料集中到網路印表機輸出,當然也可以讓 PHP 直接把 PDF 輸出到網路印表機。如果是公開環境,例如使用者坐在自己家裡上網,那就不行了。

Ajax anti-patterns 與個人經驗談

《老子》有云「不善人者善人之資」。了解不適當與錯誤的方式,也是學習中重要的一環。在程式設計的領域中亦如是,好的設計方式會 patternalization ,壞的設計方式也會。Jack D Herrington 于 Ajax and XML: Five Ajax anti-patterns 列舉了 5 種常見的 Ajax anti-patterns 。這5種確實常見,我個人也有不少經驗可與之聯繫。

走上程式設計之路是否須具備興趣?

FireFoxer 于 要不要走程式設計這一行 提到「興趣」對於一個想走程式設計這一行的人是否必要。

個人看法以為興趣是必要的。Programming 基本上是一種「設計」工作,尤其對我這種傾向 Agile method 的程序人員而言更是如此。設計就是編程,編程就是設計。我們不但要達成功能需求,更在其中追求技藝之美。如果沒興趣,將得到一個「程式碼打字人員, code typist」,而不是一個「程式設計人員, program designer」;兩者之差別在「創造力」,其差異宛如臨摹者與畫家之分。

在我看來資訊軟體產業中也分很多行,而程式設計 != 資訊軟體產業。我並不輕視 code typist ,因為資訊軟體產業這一行還是需要 code typist ,但走這條路不等於走程式設計這一行。再者就我週遭經驗,沒有興趣以及一定偏執程度的人,通常在這條路上都待不久。儘管他們不會離開資訊軟體產業,但不會再投入編程工作了。

我在《軟體工程的 GPS》說「一個人寫程式,其實很苦悶;兩個人一起寫,就頗有樂趣了」。這句話發自心腑。獨行之路不好走,沒有興趣走不下去。

W3C Ruby 標注文字的注音、假名

前幾天我在每天固定活動的某ACG論壇中,看到有人問如何在文章的漢字上標注假名。某元老人士說可以用 HTML 中的 Ruby 標籤。這我以前沒用過,當下就去搜尋相關資訊。

Ruby 標籤屬於 W3C XHTML 1.1 規範項目,規範內容查閱《Ruby Annotation》。原本是 Micorsoft IE 5.5版加進的延伸功能,後來成為 W3C XHTML 1.1 規範項目之一,目前 IE 以外的瀏覽器仍未普遍支援此標籤。Firefox 的使用者可以安裝 ぴろ 氏提供的「XHTML Ruby Support」擴充套件。

TWPUG問答 - 按了重新整理後又新增一筆相同資料?

當使用者按下瀏覽器的「重新整理」按鈕後,又再次新增一筆相同的資料,要如何避免這種情形? Taiwan PHP User Group所見問題

使用者按「重新整理」時,瀏覽器會再次送出表單資料 (現在的瀏覽器應該都會警告使用者將再次送出)。說白了,這等於問使用者是不是要再新增一筆同樣的資料。

解決方式不難,處理表單的 PHP 程式輸出一個要求瀏覽器重導向到檢視頁面的動作即可,「重導向」動作就是引導瀏覽器轉向其他頁面。當頁面重導向後,瀏覽器就不會於重整時再次送出表單。

例如使用者於 input.php 填入表單,表單送交 save.php 處理, save.php 處理之後引導瀏覽器至 list.php 。根據 HTTP 協定,引導瀏覽器轉向新網頁的導向動作為 header('Location: 新網頁之URL');。See also: header()

在 GoogleCode 建立軟體專案的第一步

Google Code 是一項開放源碼專案管理服務平台 - Google Code Home,它採用 Subversion 作為版本控制系統(See also: Programming with Subversion Quickstart)。想申請建立專案非常容易,只要到 Prject Hosting 中填好申請表格即可建立專案。唯一限制是軟體授權證一定要採用 Google Code 提供的開放源碼授權證 (如 GPL, Apache License, New BSD License)。必須先登入 Gmail 帳號之後,才會出現 Create a new project 的申請表連結。提醒事項:

PHP 實踐 mix-in 概念 part 2 - MixableClass

第一部份《PHP 實踐 mix-in 概念之可行性》一文中解釋了 PHP 的個體如何加入新的方法。但那僅針對個體而非類別,那些混成內容無法繼承再用。而 Ruby 的混成(mix-in)概念是針對類別,其混成結果是一個類別,這些混成內容可經繼承機制再用。所以我接下來就要為 PHP 實踐一個可以混成的類別 - MixableClass

我的設計目標有二。第一、個體可以動態增刪方法,且不影嚮其他個體。第二、以抽象化方法混成新的類別。

自由時報對經濟學人去蔣化報導的阿Q評論

權威性期刊《Economist (經濟學人)》日前刊登「Cultural revolution - The fight over a dictator's legacy」一文評論台灣的中正紀念堂處理爭議。自由時報不負我所期待,寫了篇很阿Q 的回應評論「經濟學人去蔣化報導 統派媒體硬拗為文革」。自由時報的政治版一向很阿Q ,這一篇回應也是如此。我懷疑自由時報的記者根本不了解什麼是「文化大革命」。他所知道的文化大革命,或許只是國民黨過去灌輸的偏差印象。因此,自由時報記者看不出經濟學人以「Cultural revolution」為主標題之用意。

php-SpreadsheetReader

Update: 2007/07/02

A PHP library for read spreadsheet files

PHP library for read data of spreadsheet files. It supports OpenDocument Spreadsheet (.ods), Microsoft Excel 97/2000 (.xls), CSV (.csv), and Text with tab-separated or patterns (.txt).

Use this command to anonymously check out the latest project source code:

 svn checkout http://php-spreadsheetreader.googlecode.com/svn/ php-spreadsheetreader

Current download link: SpreadsheetReader_rev-25.zip

This proejct is hosted in php-spreadsheetreader - Google Code. It is issued on under the GNU Lesser General Public License. For further information click here.

類別繼承、介面宣告與模組混成(mix-in)

在思考 Ruby 模組與混成(mix-in)概念的過程中,勾起了我當初學習 Java 的記憶。C++ 藉由多重繼承達成程式碼再用之目的,也因此衍生了類別鑽石繼承問題。而 Java 出現時,強調它使用單一繼承並結合介面宣告而避免鑽石繼承問題。然而我對介面的使用經驗卻是負面的。

介面只宣告行為的外觀而不牽涉細節,細節在類之中個別實現。舉例而言,如果有兩個不具共同父祖類別的類,假設為 A, B 類,但具有一個共同的行為、一段相同的程式。 C++ 的作法是將此共同行為 - 亦即這一段相同的程式 - 設計為一個類,假設為 C 類,再令 A, B 類多重繼承 C 類;只要 C 類之中沒有任何屬性與 A, B 類之父祖相同,就不會導致鑽石繼承,同時達成程式碼再用之目的。Java 的作法則有兩個方式,其一是介面,其二是深度繼承。