2014年1月15日 星期三

PHP 去除 ASCII 控制字元

Last updated on Jan 15th, 2014 by Sam Lin <samlin35@gmail.com>

在寫一段 PHP 將檔案每一行讀出來並且用 XML 輸出的程式,結果意外地出現了錯誤。我將該行寫成 xml 並使用瀏覽器來看,顯示錯誤如下圖。




使用 wget 將 test.xml 抓了下來,使用編輯器顯示其 hex,如下:


從上圖看到反白的字元 1F 恍然大悟,原來是 ASCII 的特殊字元所造成 xml 顯示錯誤。從 Wikipedia ASCII 可以知道從 0x00 到 0x 1F 都是 ASCII 的控制字元,所以如果我們要用 PHP 輸出的話,最好先過濾掉這些字元。要過濾的話,可以使用 preg_replace 這個 function 。

範例如下,

$output = preg_replace('/[^(\x20-\x7F)]*/','', htmlspecialchars($dumpstring));
echo $output;

2014年1月11日 星期六

遠通駭客事件之我感

看到遠通最近被駭的事件,姑且不論是真有其事或是誤會一場,但讓我想到開發一個系統或是將系統外包,驗收時業主應該都是針對功能去驗收,不曉得是否會針對系統安全性去做驗收呢?承包商開發時是否也會自發地在程式或系統中多注意系統的漏洞、程式的漏洞?

之前修一門系統安全的課程,老師提及了很多關於系統安全、病毒、惡意程式等等的介紹,並且也講了一些案例讓我們了解這重要性,甚至當場示範連到某政府官網,在頁面上輸入一些特別的字串 (使用 SQL injection 的做法),結果網頁可以查到民眾的部份個資,當下那一刻真是讓我們大開眼界,而且也讓我意識到,寫程式不只是把功能做好就好了,一些疏忽的漏洞反而帶來更大的危害。

但是一般的程式撰寫的書,或是老師上課,都是教我們如何寫程式、如何把需要的功能寫出來,但是卻很少在教我們寫較安全的程式。

說到系統安全,我想起曾經念某所大學 (打馬賽克,請勿人肉),而校方有開給每位學生 Unix 帳號,可能一般大家也不大會去使用,頂多進去看看信,不過有次我就連進那台 Unix 主機,在一些路徑切換著,意外地在某路徑發現很神奇的 meta file ,我 vi 一看檔案內容,疑似存著改過密碼的 user 列表及密碼,然後我就偷偷地存起來。

當時那年代還在用電話撥接才能連上 Internet,而且是透過學校提供的帳號密碼才行,我無聊試試這些存下來的帳密,結果還真可以使用,我畢業後,學生帳號被刪除了,但是我還有這多組可以讓我繼續撥接。

說這次的經驗不是要說我多厲害,而且我也只是到一些路徑逛逛而已,並不高招,但是這樣容易洩漏重要資訊的做法,是否你我之間都會犯錯呢?

2014年1月10日 星期五

shell script 裡取絕對值

Last updated on Jan 10th, 2014 by Sam Lin <samlin35@gmail.com>


我臨時需要在 shell script 裡計算絕對值,經我參考一些網路上的文章與討論後,最後找到這樣的方法是可行的,寫成筆記並且跟大家分享。下面範例重點就在於 $price_down 這個變數後面使用 #- ,就可以將參數變成絕對值了。


My environment: Freebsd 9.2


$ cat abs_ex.sh
#!/bin/sh
htc2012=1300
htc2013=123
price_down=`expr $htc2013 - $htc2012`
echo price_down=$price_down
echo abs=${price_down#-}


$ ./abs_ex.sh
price_down=-1177
abs=1177

2014年1月6日 星期一

Clear dmesg in Freebsd

My environment: Freebsd 9.2


root@freebsd91:/root # sysctl kern.msgbuf_clear=1
kern.msgbuf_clear: 0 -> 0
root@freebsd91:/root # dmesg


root@freebsd91:/root #


Last updated on Jan 6th, 2014 by Sam Lin <samlin35@gmail.com>