[建議] 給初學者的幾個PHP開發建議
有感而發,純屬嘮叨...
以下講三個我覺得最常看到的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
推
07/30 10:35, , 1F
07/30 10:35, 1F
→
07/30 10:35, , 2F
07/30 10:35, 2F
→
07/30 10:36, , 3F
07/30 10:36, 3F
→
07/30 10:36, , 4F
07/30 10:36, 4F
推
07/30 15:31, , 5F
07/30 15:31, 5F
→
07/30 15:32, , 6F
07/30 15:32, 6F
推
07/30 15:35, , 7F
07/30 15:35, 7F
推
07/30 18:05, , 8F
07/30 18:05, 8F
推
07/31 15:08, , 9F
07/31 15:08, 9F
推
07/31 15:57, , 10F
07/31 15:57, 10F
→
07/31 16:02, , 11F
07/31 16:02, 11F
推
07/31 18:23, , 12F
07/31 18:23, 12F
推
07/31 22:35, , 13F
07/31 22:35, 13F
推
07/31 23:23, , 14F
07/31 23:23, 14F
推
08/01 01:21, , 15F
08/01 01:21, 15F
→
08/01 01:22, , 16F
08/01 01:22, 16F
→
08/01 01:22, , 17F
08/01 01:22, 17F
→
08/01 11:18, , 18F
08/01 11:18, 18F
→
08/01 11:19, , 19F
08/01 11:19, 19F
推
08/01 11:23, , 20F
08/01 11:23, 20F
推
08/01 11:25, , 21F
08/01 11:25, 21F
推
08/01 13:33, , 22F
08/01 13:33, 22F
推
10/03 19:11, , 23F
10/03 19:11, 23F
討論串 (同標題文章)