ARTICLE
1

網頁程式的漏洞
網頁程式的漏洞
在網頁程式的撰寫上,參數的傳遞可分為post與get。
不論是以何種方式傳遞參數,在撰寫程式碼的時候必須得在 Server 端加工過後才能使用;否則很有可能會成為有心人士攻擊的漏洞。
例如:
以get的方式傳遞參數
http://www.test.com.tw/data.asp?data_seq=1
檔案 data.asp
....
SQL = "select * from data_table where data_seq=" & Request("data_seq")
'Run SQL Cmd
-->
以正常的參數傳遞來說,程式碼可以組合出的 SQL command 是:
select * from data_table where data_seq=1
程式能按照預期的結果執行,但是如果參數被人改成:
http://www.test.com.tw/data.asp?data_seq=1 or 1=1
那麼程式碼組合出來的 SQL command 將變成
select * from data_table where data_seq=1 or 1=1
如此一來,參數將會淪為攻擊者的填空遊戲。輕者程式執行出錯,重者可能會造成資料庫損毀。
因此,在 Server 端程式碼的撰寫上,必需對 Client 端傳遞過來的參數加工處理,以避免類似的漏洞產生。
Posted by 程式設計師 / wyvern
ARTICLE
2

預存程序 Stored Procedures
預存程序 (Stored Procedures)
預存程序是一種可以寫在資料庫伺服端的SQL程序,可以在伺服端呼叫,也可以由客戶端來呼叫。通常是將某些固定的異動,或查詢動作寫成預存程序以達成下列幾個優點:
1.在預存程序中可以完全控制整個異動的完整性,使資料庫維持一致性。
2.使用者只能呼叫它來執行,無法知道其內容與資料庫中的綱要,所以也可以達成某種程度的綱要資料與異動細節之隱密性與安全性。
3.透過預存程序也可以達成邏輯上的資料獨立。
4.可以加強應用程式開發時的模組化程度,讓應用程式專注在使用者介面與流程控制,而把資料庫的異動處理與查詢部份交給預存程序來完成,使兩者有適當的劃分,讓系統更容易維護。
5.可以讓複雜的異動完全由伺服端控制與執行,客戶端只要負責發出呼叫需求與接收執行結果即可,降低網路上的流量。
6.降低人為錯誤的可能性。
資料來源
儒林:資料庫系統 - 應用實務 7.9.2
Posted by 程式設計師 / wyvern
ARTICLE
3

資料庫正規化
資料庫正規化:
正規化的目的就是要減少資料庫中重複的資料,以便快速的找到所需的資料,提高資料庫的效能。重複的資料會浪費磁碟空間,並產生維護方面的問題。
正規化型式:
資料庫正規化有一些規則。每條規則都稱為「正規化形式」。如果遵守第一條規則,資料庫就稱為屬於「第一正規化形式」
(1NF)。如果遵守前三條規則,資料庫就被視為屬於「第三正規化形式」(3NF)。
正規化型式有:
‧第一正規化型式 (First Normal Form, 1NF)。
目的是讓每個資料表都會有一個主鍵 (Primary Key, PK),而且在資料表中,每一列的每一欄所存放的值必需是單一值。
‧第二正規化型式 (Second Normal Form, 2NF)。
目的在去除僅與部分 PK 相依的欄位,也就是說,非 PK 的欄位不能只與 PK 中的部分欄位有關係。
‧第三正規化型式 (Third Normal Form, 3NF)。
目的在除去所有非 PK 的欄位間的相依性,亦即所有非 PK 的欄位之間不能有從屬關係。
‧其他正規化形式:
第四正規形式,也稱為「Boyce Codd 正規形式」(BCNF);而第五正規形式雖然存在,但實際設計時則很少考慮此形式。忽略這些規則可能無法設計出完美的資料庫,但不會影響資料庫功能。
正規化的步驟:
第一正規化型式:
‧刪除各個資料表中的重複群組。
‧為每一組關聯的資料建立不同的資料表。
‧使用 PK 識別每一組關聯的資料。
第二正規化型式:
‧為可套用於多筆記錄的多組值建立不同的資料表。
‧使用 FK (Foreign Key),讓這些資料表產生關聯。
第三正規化型式:
‧刪除不依賴索引鍵的欄位。
Posted by 程式設計師 / wyvern