作者ybite (小犬)
看板PHP
標題[建議] 給初學者的幾個PHP開發建議
時間Wed Jul 30 03:43:54 2008
有感而發,純屬嘮叨...
以下講三個我覺得最常看到的PHP壞習慣和我的想法
如果有更好的建議歡迎提出!
1. 請使用全Unicode/utf-8的編碼環境
為什麼不要用big5?原因很簡單
一是因為現在big5陷入亂世之中(事實上在補big5的Unicode補完計畫便是一個範例)
二是big5的許功蓋問題是個多年來難解的衝碼問題
因此,建議您使用全Unicode的編碼環境
Unicode包含各國語言的文字編碼,又不會有衝碼問題!
在網頁、php上編碼全用utf-8,MySQL資料庫方面校訂請設「utf8_general_ci」
作utf-8網頁不建議用記事本,記事本的utf-8會自動加BOM,引發一些問題
精華區中有編輯器推薦文,選一個來用吧
而一個常被遺忘的部份就是MySQL中Connection Character Sets的設定
(
http://dev.mysql.com/doc/refman/5.0/en/charset-connection.html)
最常的作法是在連上資料庫後送query: mysql_query('SET NAMES utf8;');
這些都完成後,你就擁有了一個全utf-8的環境囉!
2. 請務必愛用$_GET、$_POST
我相信不只一本講PHP的書會給這樣的程式碼:
<?php
echo "$doggy";
?>
然後跟你講執行xxx.php?doggy=3 之後會跑出3。
這是一個PHP的
安全性遺毒,也就是所謂的register_globals
這個功能為何而危險呢?他把GET、POST或是Cookie裡面的東西全部倒成全域變數
進而增加覆蓋變數的可怕危險性!(範例:
http://tw.php.net/register_globals)
所以,也請拜託
千萬千萬記得把register_globals設為off
這個功能也會在PHP6拿掉
也建議請不要作extract($_POST)這種事情,結果半斤八兩
處理GET或POST或Cookie用$_GET、$_POST系列才是王道!
3. 請不要依賴Magic Quotes,用心對抗SQL injection
magic_quotes_gpc很好很強大,他會把GET、POST和Cookie的引號都加上「\」
讓你可以把東西直接倒進SQL Query而避免SQL injection
...但這只是表面上很方便 囧
當你需要用到$_GET或$_POST的時候
動不動你就得要get_magic_quotes_gpc()來看有沒有被加上「\」...
真正預防SQL injection的方法是審慎處理每一個Query
該用int進來的東西就用sprintf或settype等來轉
對於字串可以用addslashes或著不方便一點的mysql_real_escape_string
把產生INSERT或UPDATE查詢的部份寫成一個函式是我很喜歡,安全又方便的作法
一是這個函式可以內建對String的Escape(加上「\」),二是可以直接丟Array
這種東西很多人寫過,應該不難找
see also:
http://en.wikibooks.org/wiki/Programming:PHP:SQL_Injection
http://tw.php.net/manual/en/security.database.sql-injection.php
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.112.199.119
推 thitbbeb :推…大大可不可以再多講些必學會的東西?舉個實例像 07/30 10:35
→ thitbbeb :是新增資料一般大大你都如何寫呢? 07/30 10:35
→ thitbbeb :我雖然功能都寫得出來可是不知程式有沒有達到最佳化 07/30 10:36
→ thitbbeb :還有安全性的問題,有無BUG我都比較不了解… 07/30 10:36
推 buganini :推一下 另外windows上Apache 2某版本之後 07/30 15:31
→ buganini :只能收UTF8的URL(即使是urlencoded) 不然會forbidden 07/30 15:32
推 buganini :big5唯一的好處只有....算字寬比較準= = 07/30 15:35
推 kylekai :Big5算字寬比較準?...何解?...用 mb_strlen 不能嗎? 07/30 18:05
推 dannyst :很實用 , 推 07/31 15:08
推 kyork :big5的好處是spider可以認得,utf-8會影響搜尋排行 07/31 15:57
→ kyork :不過話說回來spider本來就不愛動態網頁了=.= 07/31 16:02
推 alpe :樓上的沒這回事吧. spider big5 utf-8 都吃吧 07/31 18:23
推 Kenqr :推~ 07/31 22:35
推 BloodyDawn :推一個 07/31 23:23
→ kyork :用utf-8 spider無法判斷是哪一國語言 08/01 01:22
→ kyork :如果是錯誤資訊的話請指正 08/01 01:22
→ bcse :我覺得無法判斷的spider滿笨的… XD 看字區就知道啦 08/01 11:18
→ bcse :你那篇的資訊應該已經過時了,現在G、Y!都吃UTF-8 08/01 11:19
推 bcse :不過那篇文章舉的例子…我覺得已經不是編碼的問題 08/01 11:23
推 alpe :如果說沒辦法抓utf8的spider你要它也沒用. 08/01 11:25
推 Arton0306 :推! 08/01 13:33
推 ppoo75 :受教了!!我推!! 10/03 19:11