2009年5月31日 星期日

[書評]Web安全測試錦囊妙技

電腦書,題材如其名,出版社歐萊禮。

這本的主題是教你如何用各種免費軟體搞掛....噢不,測試Web應用程式。要注意的是,這本主要採用的是測試員的角度,也就是說「你沒有完整的Server端程式碼也沒有相關知識,也許你可以跟工程師要,但是不太可能太頻繁或詳細」的立場。如果你自己就是Web應用程式的撰寫者,會免去不少麻煩,但其中幾個也會不那麼需要做。當然,相關知識先有總是好的。

內容上,書中詳細的提到了各種基礎動作跟比較具體的攻擊法。更詳細的深入的話,書中有介紹網站跟書籍。

如果對Web安全議題沒有多少了解的話,這本相信是很不錯的入門書籍。

2009年5月21日 星期四

Web Security測試用工具

以下是從「Web安全測試錦囊妙計」第二章擷取出來的(歐萊禮出版,原書名Web Security Testing Cookbook)。目的是為了我不用每次都打網址...XD

下面列表我會寫上必要的註解,不過還是建議需要的話自己去看原書

工具列表:
  1. Firefox

  2. Fx Extension:
    1. View Source Chart (不適用Fx3,但有適用的實驗版本)
    2. Firebug
    3. Tamper Data
    4. Edit Cookies (適用於Fx3的是新版:Add N Edit Cookies)
    5. User Agent Switcher (不知為何裝起來沒作用...)
    6. SwitchProxy

  3. WebScarab (需要Java Runtime)

  4. Perl (Windows: ActivePerl)

  5. CAL9000
    注意:原作者有警告,不要把這東西放在網路Server上,請在本機端環境操作他

  6. ViewState Decoder

  7. cURL

  8. Pronzilla (這是一組而非一個工具)
    注意:這些是為了情色目的開發的工具,但只要你不針對該方向使用,工具本身事「純真無邪」的(書上就這麼寫XD)。
    1. RefSpoof: 修改HTTP Referer
    2. Digger: 目錄橫跨(Directory traversal)工具
    3. Spiderzilla: Website Spider
    4. Increment & Decrement: 竄改URL參數

  9. Cygwin (建議加裝Perl)

  10. Nikto 2 (需要Perl & Cygwin, 需要LibWhisker)

  11. Burp Suite (非完全免費,但免費的部份就有用)

  12. Apache HTTP Server

2009年5月12日 星期二

以索引的方式取用Smarty的config變數

我遇到的狀況是這樣。假設我在Smarty的config檔裡面寫了這樣的內容:
level1 = 等級一
level2 = 等級二
level3 = 等級三
一般來說在template裡面,我要呼叫上述內容的寫法是:
{#level1#}

問題來了,如果我現在要依照PHP檔輸入的內容動態的取用上述內容的話呢?
比如說,透過PHP檔內的動作,現在template裡有個變數$para,內容是"level1"。
我想用它來取得config檔內同名的變數的數值。

很直覺的想法會是
{#$para#}
之類的對吧?不過很可惜,Smarty不支援這種語法。
Smarty的config檔的變數(已讀入的)也會以$smarty->config->level1之類的方式儲存,
不過當然的,我也不能寫成$smarty->config->$para。

另一種想法是config裡面能不能直接寫陣列?
我自己嘗試不行,我也沒看到哪個範例可以的。

最後達成的作法是藉由template內嵌php程式碼。
將config的內容重組成template variables的陣列,傳入template中。
$ar = array('level1', 'level2', 'level3');
foreach($ar as $v)
{
$ar2[$v] = $this->get_config_vars($v);
}
$this->assign('ar', $ar2);
然後在template裡面使用。
$ar[$para]


雖然是相當拐彎抹角的作法,不過會比在template裡面寫一堆重複的程式碼好多了。

2009年5月5日 星期二

如何建立單機性質的SVN版本控管

單機性質SVN


版本控管以及備份的重要性應該不用多講了,而SVN有多麼優秀也不用多提。
只是一般聽到的SVN都是需要一個網路上的SVN Server,
那自己寫點小東西,沒有SVN Server又想要版本控管的話該怎麼辦呢?
這就是這篇文章的主題。建立一個個人的SVN版本控管。
基本上是參考這篇的,不過我會用中文口語的講出來。

步驟:
  1. 下載TortoiseSVN最新版。我是用Windows版
  2. 選擇你要拿來存放版本控管的內容的目錄(最好是空的),
    檔案管理員右鍵->TortoiseSVN->Create Repository here...
  3. 接下來就可以使用Repository Browser連到該目錄了,
    位址類似這樣:file:///Q:/THBRsvntest
  4. 在把該目錄作最初的整理後(比如trunk/branches/tags三分法),將初始的程式檔案import進來。
    在你要載入的資料夾上,檔案管理員右鍵->TortoiseSVN->Import...。
    注意該資料夾不會一併import,只有資料夾的內容會。
    還有,被你指定import的資料夾並不會因此就有版本控管。要再進行checkout才行
  5. 進入Repository Browser,對你要checkout的資料夾右鍵->Checkout...。
    注意一樣,只有資料夾內的內容會被checkout。
  6. checkout出來的資料已經有了版本控管了。剩下的跟一般TortoiseSVN用法相同。

以隨身碟做為存放Repository的裝置


上述作法我遇到的主要問題之一是,如果你在兩個以上的地方都有電腦而且都會寫程式,使用頻率還差不多怎麼辦?分別建立單機SVN是個辦法,但是版本控管不能統一。

另一種作法是,同樣分別建立單機SVN,但是建立在同一個隨身碟上。兩台(或以上)的電腦對同一個隨身碟做checkout跟commit,所以版本控管的來源只有一個。比較有問題的是隨身碟的代號可能每次放入時不一樣(已經插了其他裝置導致代號改變...之類的),每次都來一次Relocate又太麻煩了。我的作法是將隨身碟的代號改為一個較少用的代號,這樣就比較不容易被其他會插拔的裝置影響到。(更改代號可以從我的電腦->管理->磁碟管理裡面著手)