我的雲端生活網 - Life+

Showing posts with label 微程式. Show all posts
Showing posts with label 微程式. Show all posts

Sunday, November 23, 2008

函數語言版本的費氏數列程式

費氏數列 (Fibonacci's numbers) 是 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ... 這樣的數列,其中每個數為前二個數的和,除了最前面的底數 0, 1 外。

小小的費氏數列程式很好寫,看起來也很好執行,以 C 語言為例:

n_2 = 0; n_1 = 1;
if (n == 0)
fn = n_2;
else if (n == 1)
fn = n_1;
else
for (i=2; i<n; i++) {
fn = n_2 + n_1;
n_2 = n_1;
n_1 = fn;
}

最後 fn 為答案。但 C 程式版本其實不好執行,若指定的費氏項數稍大,而程式中的變數是整數或長整數,就會溢位。

函數語言 Haskell 寫出來的比較可愛:

fibNum :: (Integral a) => a -> a
fibNum 0 = 0
fibNum 1 = 1
fibNum (n+1) = fibNum (n-1) + fibNum n

雖然沒有溢位問題了,但是打個 fibNum 100 跑得真久,因為遞迴的計算量很大。

但函數語言的好處是,許多程式可用累積變數 (aggregating parameters) 改寫成線性版本,改善計算效率。在此,例如:

fib :: (Integral a) => a -> a
fib n = fib1 n 0 1

fib1 :: (Integral a) => a -> a -> a -> a
fib1 0 x _ = x
fib1 1 _ y = y
fib1 (n+1) x y = fib1 n y (x+y)

打個 fib 100 很快就跑出答案為: 354224848179261915075 。漂亮!

在此可見程式語言的特性,除了語法可愛和簡潔之外,在可優化的容易程度是特別有價值的。

想要探索更深入的價值,請積極參與微程式資訓技術研討會1並參閱投影片。


1微程式資訊技術研討會微程式資訊股份有限公司的內部會議。

Tuesday, October 28, 2008

參與2008年第二屆OWASP官方亞洲年會

OWASP是 Open Web Application Security Project(開放網路應用的安全) 的省稱。

這個會議在2008年10月27到28日在台北市國際會議中心(3F)舉行,主要是揭露當前在網路應用上的許多攻擊方式。

概觀

McAfee Foundstone 陳彥銘理事指出當前熱門的攻擊有 mass SQL injection 、 buffer overflow 、 cross-site scripting 等。此外以社會基礎的攻擊方式也需注意,例如由於 Google 搜尋找到一項地方新聞提到 UAL 破產,使 UAL 當天股價臨時劇烈滑落而損失。安全措施類似軟體發展過程,有一套 SDLC (Software Development Life Cycle) 。微軟也有 Microsoft SDL 。而一般企業使用 ad-hoc SDL ,不見得將理論的 SDLC 全部採用。一般安全測試方法有內部狀態測試、將測試外包、或是滲透測試。而未來在網路安全防護的要項是:

  • 使用Web 2.0服務,則一部份安全關卡與 Web 2.0 服務有關係。
  • 安全防護是一個過程,應列為日常生活該做的事情。
  • 有些非安全專業的公司購買安全專業的公司,做為走向安全領域的方法。
  • MS08067的安全威脅不是由自動工具發現;許多攻擊方式不能由自動工具阻擋。

安全防護需要關心的方面有:密碼政策、存取控制政策、程序流程控制、客戶端資料驗證、資料的保護(SSL)、以及不要發明自己的加解密演算法等等。

OWASP台灣分會阿瑪科技黃耀文理事介紹了網路攻擊程式的發展趨勢,由1993年米開朗基羅病毒、1996年的VBA巨集病毒、一路直道2004年 skylived IE javascript heap spray 技巧、以及當前的 mass SQL injection。

攻擊方法

今日多以組織型駭客發動規模攻擊。而攻擊程式則有許多程式技巧:

  • 網頁掛馬:只要想辦法在網頁中殖入 <script src="ALIEN.JS"></script> 就是掛馬。
  • 善用命名混淆、字串分解、編碼混淆就能夠製作變形的攻擊程式。混淆是一般的技巧,對於安全防護的麻煩是,並非混淆的網頁碼都是攻擊。
  • 攻擊程式可用若干技巧躲閉安全分析:測試執行環境是否為可上網的環境或網頁的直譯器、設法隱藏 document.write 和 eval 函數、以及使用 javascript 的函數語言特性撰寫能自我校驗的程式。

Javascript 函數語言特性的程式技巧,例如:

function testCallee () { return argument.callee; }
document.write( testCallee() );
// 印出 function testCallee () { return argument.callee; }

由於網路應用程式執行環境的特殊, source analysis 是可採用的安全分析方法。

ICST的林佳明介紹了 web mail 的攻擊方式,使駭客能夠容易偷取電子郵件。而那樣的攻擊手法不是修改密碼能夠解決的。

另外有 Robert "RSnake" Hansen 介紹新的 clickjacking 攻擊方式。

由此可見,對於 web 執行平台(包含客戶端與服務端),需要新型態的防火牆如 WAF (Web Application Firewalls) 及持續的安全改善政策。

詳細的資訊,或許等十二月的微程式資訊技術研討會做細節的分享。

Blog Archive