PHP+MySQL 環境下 SQL Injection 攻防戰
在 OurMySQL Blog 看到這篇:『PHP+MySQL环境下SQL Injection攻防总结』寫的相當不錯,裡面有一些觀念,可以讓初學 PHP & MySQL 的使用者知道如何防護 SQL Injection (資料隱碼),內容提到 magic_quotes_gpc 在 on 跟 off 的狀況如何防護,但是可以清楚看到 PHP 官方文件提到在 PHP 5.3.0 magic_quotes_gpc 預設已經是關閉,在 PHP 6.0 之後正式移除,所以內容寫的 magic_quotes_gpc 狀況,可以大致上瞭解就好,真正防護 SQL Injection 是需要寫程式或者是考慮很多方式去防護。 一般在做文章查詢,都會使用 /articles.php?id=123 網址傳送方式,以 $_GET[‘id’] 送到 PHP 頁面去做處理,如果駭客想要測試是否可以利用 SQL Injection 做攻擊,可以在網址列加上 /articles.php?id=123’,請注意網址後面多出 ’,如果沒有把 $_GET[‘id’] 做處理的話,就會出現底下錯誤訊息:
supplied argument is not a valid MySQL result resource in 這是因為平常在寫 SQL 語法,會是底下這種寫法:
$sql = "SELECT id, title, content FROM articles WHERE id = '".$_GET['id']."'"; $result = mysq_query($sql);因為沒有處理跳脫字元 ',所以造成 SQL 語法錯誤,才會出現該錯誤訊息,但是如果又針對跳脫字元做防護得時候,還有另一種攻擊方式:
/articles.php?id=0 union select 1,2,load_file(char(47,101,116,99,47,112,97,115,115,119,100)) 其中的數字就是/etc/passwd 字符串的ASCII,除此之外,還可以使用字串 16 進位方式:
[Read More]/articles.php?id=0 union select 1,2,load_file(0×2f6574632f706173737764) 可以參考一下 MySQL LOAD_FILE(file_name),底下文章提到了很多方式解決。
國外 VPS 虛擬主機效能比較
在 Dk 大神那邊看到國外一篇 VPS 效能比較:『VPS Performance Comparison』,DK 對於這篇也寫了一些心得,Eivind Uggedal 針對國外比較有名的虛擬主機(包含 Amazon EC2、Linode、Prgmr、Rackspace、Slicehost )進行了效能測試,原作者寫了一些測試效能的 Python 程式,也公開程式碼在 GitHub repository,底下就來看看幾張作者測試效能產生的圖表。
針對虛擬主機的 Memory、Monthly cost、Storage、Transfer,價格方面大家都差不多,Linode 贏在每個月給的流量,Amazon 雖然記憶體給的很高,但是相對的價格很貴,在流量($0.17/$0.10 out/inn per GB of bandwidth)也是另外計費的,所以比較起來 Linode 大勝。
比較 CPU 方面,Linode 提供了 32/64 位元的 CPU 架構讓您使用,Linode、Slicehost、Rackspace 提供四個虛擬 CPU,相對於 Amazon 只提供 32位元架構以及單顆 CPU,比較下來,還是 Linode 大勝。
這兩張效能圖,很顯然的都是 Linode 大勝,所以本篇報導結論:買 Linode 就是對的,便宜又可以得到好的虛擬主機(VPS)效能。 延伸閱讀:VPS Comparison between Slicehost and Prgmr
[Javascript] 在函數裡設定參數預設值
[MySQL] 必要修正一些預設值 (performance tunning)
參考了一篇:『Fixing Poor MySQL Default Configuration Values』,裡面提到了四個 MySQL 預設值相當沒有意義,所以 Jeremy Zawodny 提出了修改,也解釋了為什麼這四個會降低 MySQL 的效能。 1. max_connect_errors: 當使用者連接 MySQL 出現錯誤,伺服器就會根據 connect_timeout 所設定時間之後,而放棄等待,放棄之後會有 counter 來紀錄連接失敗的次數,當達到 max_connect_errors 設定值,伺服器就會 locked out client 端,這會衍生一個問題,那就是可以惡搞同一台網站,把 MySQL 搞爛,造成封鎖,不過解決方法就是把 max_connect_errors 設定成 (max_connect_errors=1844674407370954751) 2. connect_timeout: 這跟上面 max_connect_errors 是有相當大的關係,MySQL 預設 connect_timeout 是五秒,可是在網路繁忙的時候,也許需要花費比較多的時間來做連接, 但是預設值是五秒的話,這樣會一直 time out,造成 counter 持續增加,屆時會超過 max_connect_errors 設定值,所以必須把 connect_timeout 設定提高到 15 or 20,這樣就可以了 (connect_timeout = 20) 3. skip-name-resolve: 在每次的 MySQL 連線,伺服器端會偵測 Client 的 DNS 反解,這步驟真的有點多餘 綜合上面結論,請加入 my.cnf 一些設定
max_connect_errors = 1844674407370954751 connect_timeout = 20 skip-name-resolve slave_net_timeout = 30Reference:
[FreeBSD] port committer 快速建立 pkg-plist
[Gmail] offline Gmail 根據 Labels 自訂選擇下載郵件備份
在 Gmail Lab 裡面講到這篇:『Choose which messages get downloaded for offline use』,內容是說之前 Gmail 開發出來可以離線瀏覽 Email 信件的 Offline Gmail 功能,不管你在任何地方您都可以任意去瀏覽之前收過的 mail 郵件,我想這功能相當方便,但是如果您的信件如果很多,有些不想同步到自己私人電腦,是不是覺得有些不方便,而想根據 Gmail 設定的 Label 來同步郵件呢,所以 Gmail 幫您考慮到的此點,也針對 Offline 做了設定改善。首先你必須先啟動 Offline Gmail 的功能,接下來在 Settings 的 Offline tab 裡面進行設定您想要下載同步的 Labels 郵件,畫面大致上如下,我想非常容易設定。 
[Linux] VirtuBox ssh 遠端控制,Windows 資料夾分享 [On Ubuntu]
VirtualBox 是一套可以模擬虛擬作業系統的軟體,目前 Release 到 3.0.10 版本,可以去官網查看 Changelog,它可以 run 在各種不同的作業系統,例如:Windows, Linux, Macintosh and OpenSolaris etc. 可以看 guest operating systems,每次只要新的 OS Release 出來,就要先用 VirtualBox 模擬一下,還有如果需要 IE6,也是需要另一套 Windows XP,在教學方面也是相當方便的,底下紀錄一下如何 pietty 去連接 VirtuBox 裡面的 Ubuntu Server。
[Read More][SQL] Microsoft SQL Server 2008 Management Studio 防止儲存需要資料表重建的變更
最近要寫 ASP.Net 專案,弄 MSSQL Server 2008 當作 Database,利用 SQL 2008 SQL Server Management Studio 管理資料庫,有點類似 MySQL Navicat Lite 軟體,或者是 Web 介面的 phpMyAdmin,在資料表填入欄位新增第一次之後,接下來要去修改資料表,發現會出現錯誤訊息:『防止儲存需要資料表重建的變更』
解決方法其實很簡單:工具->選項->左邊選單 Designers,裡面把**防止儲存需要資料表重建的變更**,取消掉,就可以了
參考資料:[SQL]使用SQL 2008 SQL Server Management Studio 更改資料表結構 出現錯誤訊息不允許儲存變更
