ASP代碼編寫標準

來源:互聯網
上載者:User
標準

一、通用原始碼格式規則
1.1開發工具

推薦使用Microsoft?公司的VisualInterDev來書寫ASP代碼,使用Macromedia?公司的Dreamweaver來書寫HTML代碼,也可以使用UltraEdit、ASPEdit2000等開發工具。

1.2縮排空格

縮排空格是指在每一級有兩到四個空格。不要在原始碼中保留TAB字元,這是因為TAB字元會隨著不同使用者的不同設定和不同的資源管理工具(列印、文檔、版本控制等)而代表不同的寬度。

1.3資料合法性檢查

所有表單提交頁面中,表單上必須填寫項目和填寫項目中非法輸入的判斷都在頁面中用javascript在用戶端判斷,如果必須和伺服器端資料比較才能判斷輸入項目是否正確不在此例。
所有提交的資訊(GET方式及POST方式)都必須在伺服器端重新進行資料合法性校正,並過濾非法字元(&;`'\"|*?~<>^()[]{}$\n\r),例如,將"'"替換成"''"(兩個單引號)號(替換字串的工作將統一使用公用的CheckInputString(str)函數);而對於數字型變數,要檢查輸入的資料是否全為數字(javascript中使用isFinite或isNaN,VbScript中使用IsNumeric)。

1.4參數傳遞

建議使用POST方法,而不推薦使用GET方法;
嚴禁使用GET方法、SESSION或其它方式傳遞SQL語句;
禁止使用GET方式傳遞大量的查詢字串,特別是未經編碼的漢字,HTTP協議傳送表單域比查詢字串效率要高,而且帶有一個大的查詢字串的頁面在某些瀏覽器上會失效;
禁止使用SESSION、COOKIE傳遞非會話期間必要的參數。

1.5URL

包含標頭檔,頁面的連結,提交的頁面,用到的圖片,如果引用的是如"include"、"image"等公用部分,必須使用絕對路徑,即以虛根目錄"/"開始的路徑,以提高運行效率。例如:

6.4使用最簡單的遊標類型和記錄鎖定方式

在ADO中定義了四種不同的遊標類型:
l動態資料指標(adOpenForwardOnly)-用於查看其他使用者所作的添加、更改和刪除,並用於不依賴書籤的Recordset中各種類型的移動。如果提供者支援,可使用書籤。
l鍵集遊標(adOpenKeyset)-其行為類似動態資料指標,不同的只是禁止查看其他使用者添加的記錄,並禁止訪問其他使用者刪除的記錄,其他使用者所作的資料更改將依然可見。它始終支援書籤,因此允許Recordset中各種類型的移動。
l靜態資料指標(adOpenDynamic)-提供記錄集合的靜態副本以尋找資料或產生報告。它始終支援書籤,因此允許Recordset中各種類型的移動。其他使用者所作的添加、更改或刪除將不可見。這是開啟用戶端(ADOR)Recordset對象時唯一允許使用的遊標類型。
l僅向前遊標(adOpenStatic)-除僅允許在記錄中向前滾動之外,其行為類似動態資料指標。這樣,當需要在Recordset中單程移動時就可提高效能。

在開啟Recordset之前設定CursorType屬性來選擇遊標類型,或使用Open方法傳遞CursorType參數。部分提供者不支援所有遊標類型。請檢查提供者的文檔。如果沒有指定遊標類型,ADO將預設開啟僅向前遊標。

在ADO中定義了四種不同的遊標類型:
ladLockReadOnly-預設值,唯讀。無法更改資料。
ladLockPessimistic-保守式記錄鎖定(逐條)。提供者執行必要的操作確保成功編輯記錄,通常採用編輯時立即鎖定資料來源的記錄的方式。
ladLockOptimistic-開放式記錄鎖定(逐條)。提供者使用開放式鎖定,只在調用Update方法時鎖定記錄。
ladLockBatchOptimistic-開放式批更新。用於與立即更新模式相反的批更新模式。

開啟Recordset前設定LockType屬性可指定開啟時提供者應該使用的鎖定類型。讀取該屬性可返回在開啟的Recordset對象上正在使用的鎖定類型。Recordset關閉時LockType屬性為讀/寫,開啟時該屬性為唯讀。

在實際使用過程中應該使用適合於處理任務的最簡單的遊標類型和記錄鎖定方式。例如:

僅開啟一個靜態記錄集並輸出:
Rs.Opensql,Conn,0,1'adOpenForwardOnly,adLockReadOnly
開啟的記錄集中有text類型的欄位:
Rs.Opensql,Conn,1,1'adOpenKeyset,adLockReadOnly

6.4SQL字串過濾

所有的字串輸入框在向資料庫提交查詢、插入、刪除或修改一條記錄時必須用字串過濾函數檢查,即:
字元型:複寫提交內容中的"'"、"''"等(使用公用函數的CheckInputString()。),並檢查字串的長度是否超長。
數值型:使用IsNumeric()判斷輸入是否為數字。
整型:使用Int(),Fix(),Round()截取其整數值。
日期型:使用isDate()函數判斷是否為正確的日期輸入。

6.5SQL事務執行

對資料庫操作的事務一般應當使用SQL的預存程序執行。對於需要在ASP頁面中執行的資料庫操作,所有插入、刪除、修改資料庫不得使用RecordSet對象,必須使用Connect對象用SQL語句執行,RecordSet只在執行查詢時使用。所有檢索資料庫的操作禁止使用"SELECT*FROM…",而要使用"SELECT欄位一,欄位二,欄位三,…FROM…"。

6.6ADO對象的關閉

所有串連資料庫頁面中,Connect和Recordset等ADO對象必須在用完後立即關閉(Close),然後將其對象釋放(Set***=nothing)。

七、Cookies
7.1Cookies的範圍

Cookies的Path屬性規定了Cookies返回伺服器的具體路徑。為了使Cookies能夠在整個網站的各個目錄都可以起作用,應將Domain域屬性設為:"/",
Cookies的Domain域屬性限制了cookies可由瀏覽器送達之處。為了使cookies能夠在整個網站的各子網站都可以起作用,應將Domain域屬性設為:".yourDomain.com"。該值將作為常量cookie_Domain放入網站的公用檔案中。即:

Response.Cookies("UserName").Path="/"
Response.Cookies("UserName").Domain=cookie_Domain

7.2Cookies的有效期間

Cookies的Expires屬性規定了Cookies的結束作用時間。如果要建立一個會話期間的cookies,即要在客戶結束瀏覽後失效,則一定不能設定該屬性。

7.3Cookies的安全

Cookies內部的敏感資訊必須加密,該加密方式在公用密鑰函數庫中定義。

1.5URL
包含標頭檔,頁面的連結,提交的頁面,用到的圖片,如果引用的是如“include”、“image”等公用部分,必須使用絕對路徑,即以虛根目錄“/”開始的路徑,以提高運行效率。例如:
<AHREF="/index.asp">
<IMGSRC="/images/logo.gif”>

在一個相對獨立的模組內部,可以使用相對路徑,以提高可移植性。但是,禁止使用“..”返回上一級目錄,即禁止使用類似“../images/logo.gif”的URL。相對路徑如下書寫:

相關文章

E-Commerce Solutions

Leverage the same tools powering the Alibaba Ecosystem

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。