2012/06/15

CodeIgniter 使用心得分享

以前寫 PHP 時不知道有 framework 可以用,程式從頭到尾都硬幹,每個輪子都自己打造的下場,不外乎就是時間不夠用、事情常常 delay、bug 買一送二越 de 越多 .....。

得知有 PHP frameworks 時,大為欣喜,只是這麼多套 framework 到底應該先挑哪一套當作起步?就怕挑了一個功能太強太複雜的會讓自己一直碰壁、挑了個太冷門的之後換一套 framework 就接近從頭學起。

經朋友介紹,CodeIgniter 該有的基本功能都有了,且不難上手,適合第一次沒用過 framework 的人當作入門。所以最近幾個網頁功能都用 CodeIgniter 當作練習。

最近 C4Labs 朋友在玩  PHP,所以藉機分享一下最近 CodeIgniter 的使用經驗,以及問題、解決方法。以下是投影片,請多指教。





Ref:
CodeIgniter | 小惡魔 - 電腦技術 - 工作筆記 - AppleBOY
http://blog.wu-boy.com/tag/codeigniter/



ps. 沒事不要裝 ion_auth 啊,會讓人嚴重墮落 XD

2012/06/13

XSS Filter on CodeIgniter

過去防止 XSS 攻擊都是透過 htmlspecialchars() 將「<」、「>」等符號編碼,但若是前端有使用 CKEditor 之類工具,文章中的樣式也會全部被洗掉。

最近用 CodeIgniter Input class 提供的 XSS filter 時,無意間發現 filter 不是將所有特殊符號過濾掉,而是經過 parser 以後才決定哪些標籤和屬性需要刪除。


一般常見用來測試 XSS 的字串:
<script>alert(123)</script>

輸出:
[removed]alert(123)[removed]



若是將 javascript 嵌在屬性當中,CodeIgniter 會將標籤留下、屬性刪除:
<a href="#" onclick="alert(123)">test</a>

輸出:
<a >test</a>

2012/06/08

取消 Ubuntu 上 MySQL 的開機自動啟動

由於小筆電跑很慢、記憶體也不多,想說 Apache 和 MySQL 都取消開機自動啟動,有需要在手動執行,便把 /etc/init.d 底下二個 script 砍刪除:
$ cd /etc/init.d/
$ rm apache2 mysql

重新啟動後,Apache 沒有啟動,但是 MySQL 卻活的好好的!

執行 /etc/init.d/mysql stop 後才注意到提示訊息,MySQL 必須使用 service 來控制啟動與停止:
Rather than invoking init scripts through /etc/init.d, use the service(8)
utility, e.g. service mysql start

Since the script you are attempting to invoke has been converted to an
Upstart job, you may also use the start(8) utility, e.g. start mysql
mysql start/running, process 2035

service 似乎只能控制啟動或是停止服務,並沒有辦法修改開機啟動設定,問了男人以後看到「see also」有個 update-rc.d,男人說是用來設定不同 run-level 底下服務是否啟動。

印象中 Ubuntu 沒有 run-level 這東西吧,不過試試也無妨:
$ update-rc.d mysql disable 2 3 4 5    # /etc/init.d/mysql missing LSB information
$ update-rc.d -f mysql remove   # Nothing special

重新開機,還是看到 MySQL 在對我微笑 ......

找了 chkconfig、sysv-rc-conf 來看到底是自己代賽還是哪裡出錯,不過確實看到 MySQL 在 run-level 2 3 4 5 下都是關著的,開機仍舊會自動啟動。

Linux 上 everything is a file,不會用工具至少還可以改設定檔內容,用 find 和 grep 把 /etc 底下所有和 mysql  有關的檔案都掃了一遍,發現 /etc/init (不是 init.d) 下還有個 mysql.conf,而且把這個設定檔砍掉以後 service 就無法辨識服務。

開啟 /etc/init/mysql.conf,前面有幾行,註解掉以後開機就不會自動啟動 MySQL 了:
start on (net-device-up
          and local-filesystems
          and runlevel [2345])
stop on runlevel [016]


Ref:
Disable autostart from mysql
http://ubuntu.5.n6.nabble.com/Disable-autostart-from-mysql-td1537743.html



ps. 太久沒寫文章,手感都沒了 QQ