2008-12-21 20:20

apache 301 Redirect 永久重新導向

最近因為 Cookie 重複的問題花了不少時間
當 wacanai.com 及 www.wacanai.com 同時在一台主機上
用遊覽器瀏覽 www.wacanai.com 的網站時
會因為之前在 wacanai.com 所存的 Cookie 變數
當變數名稱重複時瀏覽器只會送出 wacanai.com 的變數
雖然這兩個 domain 在 DNS 上都是正確
但為了避免這樣的問題發生
一台主機最好不要同時擁有這兩種 domain

所以我利用 apache 中的 Rewrite 模組功能
作永久性的重新導向
在瀏覽時都導去 www.wacanai.com 這個網址

首先先確定 Rewrite 模組已經載入了
$ sudo a2enmod rewrite

Apache 還有一個重要的目錄設定就是:
<Directory /myblogroot/>
    AllowOverride FileInfo
    Options FollowSymlinks
</Directory>

如果沒有將這個設定加上
Rewrite 在啟用時會出現 http 403 的錯誤

可以利用 .htaccess 作以下轉址設定
RewriteEngine On
RewriteCond %{HTTP_HOST} ^wacanai\.com
RewriteRule (.*) http://www.wacanai.com/$1 [R=301,L]


參考網址:
301 Redirects & Canonical Redirects for Apache
Apache之AllowOverride參數詳解
2008-12-18 23:38

find 指令進階用法 [Linux]

find 指令結構
find [path] [expression]
[path]啟始路徑
[expression]查詢參數

基本參數
-name 以指定的範本搜尋檔案名稱
-iname 同上,但不區分大小寫
find . -name 'a*.jpg'
在當前目錄下搜尋開頭為 a 的圖片檔案

-path 以指定的範本搜尋檔案路徑
-ipath 同上,但不區分大小寫
find . -path '*pics/*pic_*.jpg'
在當前目錄下搜尋 ./pics/pic_01.jpg, ./01/pics/pic_a1.jpg, ./02/pics/01/pic_aa.jpg 這些檔案

-regex 以正規表示式搜尋檔案路徑
-iregex 同上,但不區分大小寫
find . -regex '.*pic_[0-9]+\.jpg'
在當前目錄下搜尋 pic_01.jpg, pic_03.jpg, pic_03.jpg 這些檔案

-type 搜尋檔案類型:一般檔案 (f),裝置檔案 (b,c),目錄(d),連結檔(l),socket(s),FIFO(p)
find . -type l
在當前目錄下搜尋所有連結檔

-size 搜尋檔案大小:byte(c),Kilobytes(k),Megabytes(M),Gigabytes(G)
find . -size 3k
在當前目錄下搜尋大小為(3kb)的檔案

find . -size +3k
在當前目錄下搜尋大於(3kb)的檔案

find . -size -3k
在當前目錄下搜尋小於(3kb)的檔案


時間參數
-mtime 搜尋檔案的修改時間(天)
-mmin 同上,以分鐘為單位
-ctime 搜尋檔案的建立時間
-cmin 同上,以分鐘為單位
-atime 搜尋檔案的最後開啟時間
-amin 同上,以分鐘為單位
find . -mtime 3
在當前目錄下搜尋3天時修改的檔案

find . -mtime +3
在當前目錄下搜尋3天前修改的檔案

find . -mtime -3
在當前目錄下搜尋3天內修改的檔案


帳戶參數
-user 搜尋指定帳戶名稱的檔案
-nouser 同上,但是搜尋非帳戶名稱的檔案(-not -user)
find . -user ftp
在當前目錄下搜尋使用者名稱為(ftp)的檔案

find . -nouser ftp
在當前目錄下搜尋使用者名稱非(ftp)的檔案

-group 搜尋指定群組名稱的檔案
-nogroup 同上,但是搜尋非群組名稱的檔案(-not -group)
find . -group ftp
在當前目錄下搜尋群組名稱為(ftp)的檔案

find . -nogroup ftp
在當前目錄下搜尋群組名稱非(ftp)的檔案

-perm 搜尋指定的檔案權限
find . -perm 744
在當前目錄下搜尋檔案權限為(744)的檔案

find . -perm +744
在當前目錄下搜尋檔案權限小於(744)的檔案,(600,444)

find . -perm -744
在當前目錄下搜尋檔案權限大於(744)的檔案,(744,774)

如果上面的指令你都會了,來點特別的吧!

邏輯處理
() 將搜尋條件優先處理,在使用上記得用'\'跳脫
-not 將搜尋條件反相
! 同上,在使用上記得用'\'跳脫
-and 邏輯的(和)
-a 同上
-or 邏輯的(或)
-o 同上

find . \(-user ftp -perm 744\) -or \(-group ftp\)
在當前目錄下搜尋
使用者名稱為(ftp)且權限為(744)的檔案

群組名稱為(ftp)的檔案

其他
-delete 將搜尋出來的檔案刪除
find . -user ftp -delete
刪除使用者名稱為(ftp)的檔案

-printf 將搜尋出來的結果以自訂格式輸出
find . -printf '%p\n'

-fprintf 將搜尋出來的結果以自訂格式輸出至文件
find . -fprintf a.txt '%p\n'

參考來源:
find - Linux Command - Unix Command
2008-12-06 02:18

離開頁面前的對話匡 window.onBeforeUnload 事件

在頁面改變前會觸發 window.onBeforeUnload 事件
但要怎麼產生出離開前的確認匡呢?
根據在 MSDN(onbeforeunload Event) 找到的說明
When a string is assigned to the returnValue property of window.event, a dialog box appears that gives users the option to stay on the current page and retain the string that was assigned to it. The default statement that appears in the dialog box, "Are you sure you want to navigate away from this page? ... Press OK to continue, or Cancel to stay on the current page.", cannot be removed or altered.

我們只要對這個事件 return 一個訊息就可以達成
除了 undefined 以外的所有值都會產生確認匡

那到底要怎麼做呢?
/*註冊事件*/
window.onbeforeunload = function(){
    return "是否要離開此頁面";
};

/*解除事件*/
window.onbeforeunload = null;


就這樣簡單的幾行就可以達成
真是簡單到不行
而且大多數的瀏覽器都支援

展示頁面(Demo Page)
2008-12-05 00:52

Wacanai 改版了

花了一個多月的時間
終於將新的版面上線了
除了版面上的改變外
這次也降低 JavaScript 的使用量
根據之前的經驗
太多的 JavaScript 只會讓瀏覽器當掉
在 CSS 樣式上的規劃也改善不少
當然也為了介面與功能配置上做了一些修改
雖然整體來說還不是很完整
但希望新的版面能讓使用者感覺更親切

我們的網站:www.wacanai.com
2008-11-15 18:04

在固定大小的排版中做圖片選取

之前所用的圖片裁切介面(MooCrop 正方形選取( Square ))
在大尺寸圖片的選取上不是很直覺
明明就只是要裁出一張固定大小的圖
卻暫了大量的版面配置
所以我採用網路地圖的機制做了一個裁切工具
這個想法目前還只是個雛形

展示頁面(Demo Page)
2008-11-03 02:46

OWASP 2008 資訊安全年會-心得

年會都快過一個星期了,終於在六日將筆記中的紀錄作了整理,雖然都是觀念上的問題,但如果你以前沒有這些觀念的話,請現在開始養成,因為這些都是很重要的問題。
在開發過程就該考慮安全問題
在系統發展生命週期(System Development Life Cycle[SDLC])中就應該考量安全性問題,甚至是在系統設計階段,一個好的設計可以提升系統安全性,可是一個壞的設計,卻會讓整個系統漏洞百出。
別相信[先求有再求好]這句話,因為錯誤的決策很有可能讓整個網站打掉從練,那怕是開發一年多的系統都會有可能碰到這個問題,不如現在多花 2 小時,未來省 10 小時。
Server 管理介面是否安全
別以為將管理頁面放在別人連不到的地方就可以放心,像 phpMyAdmin 這類的頁面常常被放再公開的網站目錄下,即使是換了名稱還是會有被猜到的可能,所以在公開的網站目錄下避免放置這類的管理介面。
在網站目錄下是否有不應該存在的檔案
常常在上線更新時將整個系統壓縮檔放在網站目錄下,如果不甚檔名被別人 try 出來了,那整個系統的架構都會被看光,甚至 DataBase 的帳號跟密碼都會外洩,所以在網站目錄下的檔案管理對整個安全性是非常重要的。
系統設定是否安全
在 Web Server 或其他 Server 的設定是否有安全性的漏洞,Web Server 會有可以跨目錄的設定,這常常會是 Server 的機密外洩的漏洞之一,而且有許多漏洞是在系統上線後產生的,由於 Server 環境的不同造成漏洞的出現。
相關文章:
Apache 安全設定-1
Apache 安全設定-2
PHP SQL Injection 和 XSS 的偵測程式 和 程式撰寫注意事項 - 2008
便利性與安全性是互相矛盾的
在這次的講習後我感覺這兩件事是互相矛盾,雖然不是絕對的,但為了達到好的便利性,就必須在安全問題做更多的處理跟考量,所以在系統的安全防護是有代價的,勢必會花費更多的資源在安全問題上。
互動式網站的漏洞是必然的
只要是互動式網站就會有漏洞,不管是系統上或者是個人資料的處理,或多或少都會有漏洞的存在。
新的技術必定伴隨著新的安全問題
新的技術尚未經過時間的考驗,所以必然會存在未被發現的漏洞,在目前的許多新軟體都有這樣的狀況,甚至是軟體 Update 之後又出現新的漏洞。
個人資料外流得可能性?
網站沒有 100% 的安全機制,與其期望對方的網站系統,不如做好自我保護,別將太過私密的資料放在網路上,因為那個風險實在太高了,那怕是 0.01% 的可能,因為只要過了那唯一的防線後就是海闊天空了,資料就會很快的被散播出去,很帥的事,這份資料就會被備份一百份或一千份,甚至更多。
別忽視安全性測試
人的能力是有限的,總會疏忽一些事情造成一些漏洞的出現,所以還是需要程式去檢查是否有漏洞的存在,雖然光靠[黑箱測試]及[白箱測試]可以找出大部分的漏洞,仍然會有程式找不到的錯誤,還是需要人為去校定。
別太相信自己的能力
在太過於自負的時候,人總會看不到潛在的問題,當你覺得這是安全的時候,請記得查證你的作法及環節是不是會有漏洞的出現。
2008-11-01 17:27

用 CSS 實現 blogger [繼續閱讀]的方法

雖然與白花花所寫的在blogger實現繼續閱讀的作法是用同樣的方法,但為了增加使用上的彈性,我做了不一樣的基本設定,讓任何 HTML Tag 只要套用 fullpost 這個 ClassName 就可以在部分閱覽中隱藏。 在 <b:skin> 中的 CSS 設定:
/*部分隱藏樣式*/
.posts-index .fullpost{
  display:none;
}
在詳細樣版中找到 <data:post.body/> 這行,並修改成以下形式:
<div expr:class='"post-body
     entry-content
     posts-"+data:blog.pageType'>
  <data:post.body/>
  <div style='clear: both;'/> <!-- clear for photos floats -->
<!-- 非單篇顯示時,顯示繼續閱讀 -->
<b:if cond='data:blog.pageType != "item"'>
 <p>
 <b:if cond='data:post.link'>
   <a expr:href='data:post.link'>繼續閱讀...</a>
 <b:else/>
   <a expr:href='data:post.url'>繼續閱讀...</a>
 </b:if>
 </p>
</b:if>
</div>
2008-10-07 22:42

(IE6) white-space 在表格中怪問題

最近遇到一個怪問題 在 IE6 的表格中設定 white-space 屬性卻無效 只因為 IE6 怪異的 box 解析方式 對於用 px 設定的寬度有至高的優先權 完全忽略 white-space 的存在 解決的辦法就是用百分比(%)定寬
<table border="1"><tr>
  <td>彈性欄位</td>
  <td style="width: 1px; white-space: nowrap;">文字測試</td>
  <td style="width: 1%; white-space: nowrap;">文字測試</td>
</tr></table>
IE6 的呈現: