在 SampleCMS 系統中不管是前台或後台,從 GET (Request.QueryString) 與 POST (Request.Form) 傳送進系統的參數值皆會經過參數過濾機制的檢查,當系統發現參數值有疑似 XSS (Cross-Site Script) 或 SQL Injection 的指令關鍵字就會立刻終止開啟網頁的要求。
參數過濾機制使用參數過濾元件群來檢查各式各樣的規則,
以下說明參數過濾元件的各項功能以及使用方式,
2018/05/10
2018/05/08
SampleCMS 附件管理共用元件說明:附件下載共用元件 AttDownloadCommon 使用方式
在 附件管理功能概述 提到了 SampleCMS 附件管理的四項主要功能「儲存(更新)附件資訊與檔案、檢視附件資訊、下載附件檔案、刪除附件檔案」。
上一篇 附件管理共用元件 AttachFileManagerLogic 使用方式 說明附件管理共用元件 AttachFileManagerLogic 在上述功能中「儲存(更新)附件資訊與檔案、檢視附件資訊、刪除附件檔案」負責的工作。
這一篇繼續說明附件下載共用元件 AttDownloadCommon 在「下載附件檔案」負責的工作。
上一篇 附件管理共用元件 AttachFileManagerLogic 使用方式 說明附件管理共用元件 AttachFileManagerLogic 在上述功能中「儲存(更新)附件資訊與檔案、檢視附件資訊、刪除附件檔案」負責的工作。
這一篇繼續說明附件下載共用元件 AttDownloadCommon 在「下載附件檔案」負責的工作。
SampleCMS 附件管理共用元件說明:附件管理共用元件 AttachFileManagerLogic 使用方式
上一篇 附件管理功能概述 提到了 SampleCMS 附件管理的四項主要功能「儲存(更新)附件資訊與檔案、檢視附件資訊、下載附件檔案、刪除附件檔案」。
這一篇繼續說明附件管理共用元件 AttachFileManagerLogic 在上述功能中「儲存(更新)附件資訊與檔案、檢視附件資訊、刪除附件檔案」負責的工作。
這一篇繼續說明附件管理共用元件 AttachFileManagerLogic 在上述功能中「儲存(更新)附件資訊與檔案、檢視附件資訊、刪除附件檔案」負責的工作。
2018/05/07
SampleCMS 附件管理共用元件說明:附件管理功能概述
附件管理主要由「儲存(更新)附件資訊與檔案、檢視附件資訊、下載附件檔案、刪除附件檔案」這四項功能組成。而 SampleCMS 將檔案資訊與實體檔案分別存放在資料庫與磁碟,在實作程式上因此變得比較繁瑣以及需要較為謹慎,需確保檔案資訊與實體檔案皆儲存完成才算成功。
另一方面,其他的附件管理,例如:照片管理,或是在其他專案曾經製作的廣告橫幅管理、商品附件管理。它們在「儲存(更新)附件資訊與檔案、檢視附件資訊、下載附件檔案、刪除附件檔案」這四項功能中的程式流程與這個附件管理是相同的,差別在於可能需要檢查不同的檔案類型、儲存在磁碟的檔名採用不同格式、儲存在磁碟的不同目錄、甚至儲存在資料庫的不同資料表。
而這樣子的差別,不同的類型有著相同的行為但是行為裡的細項動作各自不同,蠻適合使用物件導向來設計共用相同的行為。因此在 SampleCMS 之中,製作了附件管理共用元件 AttachFileManagerLogic 與檔案下載功能的共用元件 AttDownloadCommon。
下列先以循序圖概略描述「儲存(更新)附件資訊與檔案、檢視附件資訊、下載附件檔案、刪除附件檔案」這四項功能,
另一方面,其他的附件管理,例如:照片管理,或是在其他專案曾經製作的廣告橫幅管理、商品附件管理。它們在「儲存(更新)附件資訊與檔案、檢視附件資訊、下載附件檔案、刪除附件檔案」這四項功能中的程式流程與這個附件管理是相同的,差別在於可能需要檢查不同的檔案類型、儲存在磁碟的檔名採用不同格式、儲存在磁碟的不同目錄、甚至儲存在資料庫的不同資料表。
而這樣子的差別,不同的類型有著相同的行為但是行為裡的細項動作各自不同,蠻適合使用物件導向來設計共用相同的行為。因此在 SampleCMS 之中,製作了附件管理共用元件 AttachFileManagerLogic 與檔案下載功能的共用元件 AttDownloadCommon。
下列先以循序圖概略描述「儲存(更新)附件資訊與檔案、檢視附件資訊、下載附件檔案、刪除附件檔案」這四項功能,
2018/05/03
SampleCMS 前台網頁預覽功能驗證方式說明
SampleCMS 後台管理功能「網站架構管理」提供預覽尚未開放的前台網頁內容功能。
使用的方式如同操作手冊「3.1.使用情境:檢視指定網頁資料」提到的,
"若指定的網頁資料狀態是隱藏的或者不在上架期間,則檢視鈕會變更為預覽鈕,此時點選指定語系的預覽鈕,系統將以預覽模式開啟未開放的前台網頁,並且在前台網頁中出現「您正使用預覽模式檢視本頁」的提醒訊息
* 基於保密的原則,每一次用來預覽指定的前台網頁網址有時效限制,目前為10分鐘,當預覽用的網址產生超過10分鐘且繼續被用來開啟網頁時將導向錯誤頁,此時若還需要預覽指定的前台網頁,請回到網頁管理畫面點選預覽鈕重新產生。"
以下說明前台網頁預覽功能驗證方式,
使用的方式如同操作手冊「3.1.使用情境:檢視指定網頁資料」提到的,
"若指定的網頁資料狀態是隱藏的或者不在上架期間,則檢視鈕會變更為預覽鈕,此時點選指定語系的預覽鈕,系統將以預覽模式開啟未開放的前台網頁,並且在前台網頁中出現「您正使用預覽模式檢視本頁」的提醒訊息
* 基於保密的原則,每一次用來預覽指定的前台網頁網址有時效限制,目前為10分鐘,當預覽用的網址產生超過10分鐘且繼續被用來開啟網頁時將導向錯誤頁,此時若還需要預覽指定的前台網頁,請回到網頁管理畫面點選預覽鈕重新產生。"
以下說明前台網頁預覽功能驗證方式,
SampleCMS 網頁共用元件說明:前台相關元件分工說明
在說明完 後台相關元件分工說明 之後,繼續說明前台相關元件。
接下來以通用的多功能網頁程式 Article.aspx 為例說明前台相關元件以及各項的分工,包含 網頁共用元件說明:簡介 提到的前台網頁共用元件 FrontendPageCommon。
接下來以通用的多功能網頁程式 Article.aspx 為例說明前台相關元件以及各項的分工,包含 網頁共用元件說明:簡介 提到的前台網頁共用元件 FrontendPageCommon。
2018/05/01
SampleCMS 網頁共用元件說明:後台相關元件分工說明
製作網頁程式的時候,除了至今為止談過的資料層元件、帳號與權限系統元件、網頁內容發佈系統元件、網頁共用元件這些屬於資料層與邏輯層的共用元件,展示層也有需要共用的部分。以後台網頁為例,每一個清單頁都有下列元素「 Logo 圖、登入資訊、右上角使用者選單、左側系統功能選單」。
使用 ASP.NET Web Forms 製作網頁,常用來製作展示層共用元件的方式就是使用 MasterPage 與 UserControl。SampleCMS 也不例外,接下來以帳號清單頁 Account-List.aspx 為例說明後台相關元件以及各項的分工,包含前一篇 網頁共用元件說明:簡介 提到的後台網頁共用元件 BackendPageCommon(在帳號清單頁使用的是其衍生類別 AccountCommonOfBackend)。
使用 ASP.NET Web Forms 製作網頁,常用來製作展示層共用元件的方式就是使用 MasterPage 與 UserControl。SampleCMS 也不例外,接下來以帳號清單頁 Account-List.aspx 為例說明後台相關元件以及各項的分工,包含前一篇 網頁共用元件說明:簡介 提到的後台網頁共用元件 BackendPageCommon(在帳號清單頁使用的是其衍生類別 AccountCommonOfBackend)。
2018/04/27
SampleCMS 網頁共用元件說明:簡介
在製作 ASP.NET Web Forms 網頁程式時,如果遇到多個網頁程式都會寫到的重覆功能,常用的做法就是將這項目功能從這些網頁程式中抽出並且放在一個共用的父類別 BasePage 之中,讓所有網頁程式都繼承自 BasePage,共用 BasePage 裡面的功能。
以我的例子來說,我喜歡把四散在網站中所有網頁程式裡的 Request.QueryString["Id"], Request.QueryString["name"] 包裝成屬性 int qsId, string qsName。
(另外,Session["Param"] 和 ViewState["Param"] 也是)
會這麼做的起因是為了弱點掃描,當初為了要針對 QueryString 參數值撰寫白名單機制,在統計 Request.QueryString["xxx"] 全部有多少參數名稱、各是什麼樣的類型的時候,覺得四散在程式裡的相同參數名稱太多,而且 QueryString[] 很自由的讓參數名稱不用區分大小寫導致同名參數有不同的大小寫在不同的地方,覺得維護時不好讀。
以我的例子來說,我喜歡把四散在網站中所有網頁程式裡的 Request.QueryString["Id"], Request.QueryString["name"] 包裝成屬性 int qsId, string qsName。
(另外,Session["Param"] 和 ViewState["Param"] 也是)
會這麼做的起因是為了弱點掃描,當初為了要針對 QueryString 參數值撰寫白名單機制,在統計 Request.QueryString["xxx"] 全部有多少參數名稱、各是什麼樣的類型的時候,覺得四散在程式裡的相同參數名稱太多,而且 QueryString[] 很自由的讓參數名稱不用區分大小寫導致同名參數有不同的大小寫在不同的地方,覺得維護時不好讀。
2018/04/26
SampleCMS 網頁內容發佈系統元件說明:自訂帳號授權結果
2018/04/25
SampleCMS 網頁內容發佈系統元件說明:元件提供的功能與使用方式
網頁內容發佈系統為 SampleCMS 內部的兩大子系統之一(另一個為帳號與權限系統),在系統設計說明開頭 前言 內文提到的 SampleCMS 主要提供的功能 之中,除了帳號與權限管理,其他功能都屬於這個子系統。
本篇說明系統邏輯層中的網頁內容發佈元件所提供的功能,以及呼叫者端(展示層的網頁程式)如何使用這個元件。
本篇說明系統邏輯層中的網頁內容發佈元件所提供的功能,以及呼叫者端(展示層的網頁程式)如何使用這個元件。
2018/04/24
SampleCMS 帳號與權限系統元件說明:客製化權限判斷
接續上一篇 元件提供的功能與使用方式 結尾提到的,(帳號設定頁)"使用的方法 CanEditThisPage() 之所以不用傳入擁有者資訊是因為管理頁共用元件實作了介面 ICustomEmployeeAuthorizationResult,透過實作的介面方法 InitialAuthorizationResult(bool isTopPageOfOperation, EmployeeAuthorizations authorizations) 將擁有者資訊交給了帳號與權限元件",本篇繼續說明介面 ICustomEmployeeAuthorizationResult 的作用以及需負責的工作。
2018/04/20
SampleCMS 帳號與權限系統元件說明:元件提供的功能與使用方式
上一篇 帳號與權限規則說明 提到了授權範圍的定義以及後台網頁程式如何達成權限判斷,而系統邏輯層中的帳號與權限元件就是依照帳號與權限規則設計。
接下來繼續說明帳號與權限元件所提供的功能,以及呼叫者端(展示層的網頁程式)如何使用這個元件。
接下來繼續說明帳號與權限元件所提供的功能,以及呼叫者端(展示層的網頁程式)如何使用這個元件。
2018/04/19
SampleCMS 帳號與權限系統元件說明:帳號與權限規則說明
SampleCMS 帳號與權限系統的設計以員工身份(以下簡稱身份)為主軸,帳號登入後台之後能夠使用後台左側選單中的哪些作業選項取決於帳號屬於哪一個身份,管理者需事先設定身份能否使用以及怎麼使用系統中的作業選項。
*作業選項有哪些?例如「帳號管理、身分權限管理、後端操作記錄、網站架構管理...等」。
以下說明授權給身分使用的範圍定義,
*作業選項有哪些?例如「帳號管理、身分權限管理、後端操作記錄、網站架構管理...等」。
以下說明授權給身分使用的範圍定義,
2018/04/17
SampleCMS 資料層元件說明:客製化指令資訊類別 (DataAccessCommandInfo)
前一篇提到如何透過四個步驟來建立資料層中用來存取指定 Stored Procedure(以下簡稱 SP)的指令資訊類別 (DataAccessCommandInfo) 。
接下來要繼續說明如何客製化指令資訊類別,例如:我想直接在資料層寫 sql script、我想在資料層開啟交易執行多個 SP。
接下來要繼續說明如何客製化指令資訊類別,例如:我想直接在資料層寫 sql script、我想在資料層開啟交易執行多個 SP。
2018/04/14
SampleCMS 資料層元件說明:依照 Stored Procedure 建立基本的指令資訊類別 (DataAccessCommandInfo)
寫程式的過程中,我對於需要大量重覆編寫相同格式的程式碼難免會覺得枯燥乏味,例如在撰寫資料庫存取功能,已經花時間在資料庫寫好了取得員工資料的 Stored Procedure(以下簡稱 SP),接著還要再去資料層函式庫又寫一個取得員工資料的類別,寫的內容就像是換個格式重寫一樣的 SP 名稱與參數名單,難免覺得浪費了更多時間。
個人覺得寫程式最快的方式就是「複製、貼上、修改」,但前題是複製的來源程式碼最好是整理過的,不然很可能變成 -複製混亂、貼上混亂、修改更混亂-,造成後續維護的麻煩。
針對指令資訊類別 (DataAccessCommandInfo),我把開發過程中自己常用的格式整理成一份 DemoCommandInfos.cs (放在資料層函式庫的 namespace Common.DataAccess.DemoCommandInfos,只是方便自己需要時隨時打開來用),
以下說明,
個人覺得寫程式最快的方式就是「複製、貼上、修改」,但前題是複製的來源程式碼最好是整理過的,不然很可能變成 -複製混亂、貼上混亂、修改更混亂-,造成後續維護的麻煩。
針對指令資訊類別 (DataAccessCommandInfo),我把開發過程中自己常用的格式整理成一份 DemoCommandInfos.cs (放在資料層函式庫的 namespace Common.DataAccess.DemoCommandInfos,只是方便自己需要時隨時打開來用),
以下說明,
2018/04/13
SampleCMS 資料層元件說明:指令執行者 DataAccessCommand 運作方式說明
在前一篇提到"將指令資訊物件 (cmdInfo) 丟給指令執行者 (cmd) 去執行取回填入資料的 DataSet,執行過程中指令執行者 (cmd) 會自動抓取指令資訊物件 (cmdInfo) 的成員變數,依照成員變數的名稱,將其值傳送給 SP 的同名參數",現在我們一起來看看指令執行者是如何依照指令資訊物件的描述去資料庫執行 Stored Procedure(以下簡稱 SP)。
2018/04/12
SampleCMS 資料層元件說明:基本的呼叫方式
SampleCMS 的資料存取幾乎都是透過事先寫好的 Stored Procedure(以下簡稱 SP)。
(讀取資料用的 SP 名稱為 dbo.spTableName_GetData 或是 dbo.spTableName_GetList、
新增用的 SP 名稱為 dbo.spTableName_InsertData、
更新用的 SP 名稱為 dbo.spTableName_UpdateData、
刪除用的 SP 名稱為 dbo.spTableName_DeleteData)
因此本系統的資料層元件是以執行 SP 做為主軸來設計,
以下說明基本的呼叫方式,
(讀取資料用的 SP 名稱為 dbo.spTableName_GetData 或是 dbo.spTableName_GetList、
新增用的 SP 名稱為 dbo.spTableName_InsertData、
更新用的 SP 名稱為 dbo.spTableName_UpdateData、
刪除用的 SP 名稱為 dbo.spTableName_DeleteData)
因此本系統的資料層元件是以執行 SP 做為主軸來設計,
以下說明基本的呼叫方式,
SampleCMS 系統資料表說明
SampleCMS 系統資料表,以功能區分為兩大類,「帳號與權限系統」與「網頁內容發佈系統」。
以下說明,
以下說明,
SampleCMS 系統組件關聯圖
SampleCMS 內容管理系統為三層式架構設計,以功能區分為兩大類,「帳號與權限系統」與「網頁內容發佈系統」。
下圖為系統組件關聯圖,以下說明:
下圖為系統組件關聯圖,以下說明:
SampleCMS 系統設計說明:前言
SampleCMS 是一個基本款內容管理系統 (Demo、Source),是我在最近7年工作的過程中將各個前輩留下來的內容管理系統整理、歸納、簡化與重新設計後的結果。在此感謝先得利資訊讓我進入製作內容管理系統的領域,讓我能夠看到以及參與製作各式的內容管理系統;感謝叡揚資訊讓我有機會接觸與學習不同的系統架構設計方式,增加了我在物件導向程式設計的經驗。
回題,
SampleCMS 主要提供的功能如下:
回題,
SampleCMS 主要提供的功能如下:
訂閱:
文章 (Atom)


