要撰寫更安全的應用程式,其關鍵原則在於使用前要先正確取得資料。正確取得資料需要為每個外部輸入套用驗證 步驟。在ASP.NET中,驗證控制項提供簡單易用的機制,可以完成各種驗證工作,包括測試型態是否有效,以及數值是否位於指定範圍或必要欄位內;熟練這 些控制項的用法是初學者應該要做的事。
ASP.NET驗証方式有兩種: 1.使用驗証控制項提供使用者輸入資料驗証、2.網頁自動進行安全性檢查
1.使用驗証控制項提供使用者輸入資料驗証,使用者控制項分為以下:
CompareValidator | 使用比較運算子,將使用者的資料與固定數值相比。此外,也可以與相同網頁內其他控制項的屬性數值相比。 |
CustomValidator | 利用程式定義之驗證邏輯來檢查使用者資料的正確性。當其他的驗證元件無法執行所需的驗證,以及當你想要使用自訂的程式碼來驗證輸入的時候,便可以使用這個驗證元件。 |
RangeValidator | 確保使用者的資料落在指定的範圍內。上限和下限可以數字、字串或日期加以表示。 |
RegularExpressionValidator | 使用規則運算式所定義的樣式來驗證使用者的資料。 |
RequiredFieldValidator | 確保使用者為必要欄位填入數值。 |
2.網頁自動進行安全性檢查,主要是防止惡意程式,若使用者輸入了危險字串(例如像指令碼),ASP.NET就會自動的產生安全性錯誤訊息 ,若是要關閉可以將Page指示詞中的ValidateRequest設為false
<%@ Page ValidateRequest="false" %>
3.單一輸入控制項可以使用多個驗證控制項,以便進行不同條件的驗證。
4.驗証控制項的EnableClientScript,可針對驗証控制項選擇驗証位置是要在用戶端或是伺服器端。在用戶端驗証可以立即回應驗証成功與否,無需PostBack,相關為減少了對伺服器端的負載。
5.只有CustomValidator可以同時選擇Server(ServerValidate)和Client(EnableClientScript)位置驗証,其餘控制項均只能擇一使用。
<asp:ValidationSummary ID="ValidationSummary1" runat="server" ShowMessageBox="True" />
7.並非所有的伺服器控制項都可以被驗證,只有含屬性為[Validation]的控制項才能夠被驗證。如下圖:
8.控制項的CausesValidation屬性可決定是否觸發驗証
<asp:Button ID="Button2" runat="server" Text="Button" OnClick="Button2_Click" CausesValidation="False" />
9.控制項的共有屬性
ControlToValidate | 要驗証控制項的ID。這是相當重要的屬性,這個屬性在決定被驗証的控制項。 |
Display | 如果用戶端有支援驗證且已啟用,便可以取得或設定應該如何配置錯誤訊息的空間──可以是靜態或動態。在進行伺服器端驗證時,這個屬性會被忽略。只有在瀏覽器支援CSS樣式的display時才允許Static靜態顯示。預設值是Dynamic。 |
EnableClientScript | 預設值是true;取得或設定是否啟用用戶端驗證。 |
Enabled | 取得或設定是否啟用驗證控制項 |
ErrorMessage | 取得或設定錯誤訊息的文字。 |
ForeColor | 取得或設定在驗證失敗時,所顯示之訊息的顏色。 |
IsValid | 取得或設定關聯的輸入控制項是否通過驗證。 |
SetFocusOnError | 指示是否將焦點移至驗證失敗的控制項上面。 |
Text | 取得或設定驗證元件錯誤訊息所顯示的說明。不過這段文字並不會取代總結文字當中的ErrorMessage內容。 |
ValidationGroup | 取得或設定控制項所屬的驗證群組。 |
10.ValidationGroup驗證群組:假設表單上有一組輸入和驗證控制項以及兩個按鈕,點選其中任何按鈕永遠都會驗證所有的控制項,若將要驗証的控制項編列成同一群組名稱,當驗証按鈕被按下時,就只會執行該群組的驗証項目。
11.控制項的主要屬性
11-1.RequiredFieldValidator主要屬性如下:
InitialValue | 控制項會驗証該屬性的值,使用者必須挑選欲設值以外的值才能通過驗証。 |
<asp:DropDownList ID="DropDownList1" runat="server">
<asp:ListItem>Please</asp:ListItem>
<asp:ListItem>1</asp:ListItem>
<asp:ListItem>2</asp:ListItem>
<asp:ListItem>3</asp:ListItem>
</asp:DropDownList>
<asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" ControlToValidate="DropDownList1" ErrorMessage="RequiredFieldValidator" InitialValue="Please"></asp:RequiredFieldValidator>
11-2.RangeValidator主要屬性如下:
MinimumValue | 設定範圍最小值。 |
MaxmumValue | 設定範圍最大值。 |
Type | 輸入要驗証的資料型態。 |
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox><asp:RangeValidator ID="RangeValidator1"
runat="server" ErrorMessage="RangeValidator" ControlToValidate="TextBox1" MaximumValue="60"
MinimumValue="18" Type="Integer"></asp:RangeValidator><br>
<asp:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click" />
11-3.CompareValidator主要屬性如下:
ControlToCompare | 設定要比較的控制項。 |
ValueToCompare | 設定要比較的值。 |
Operator | 設定比較運算子。 |
Type | 輸入要驗証的資料型態。 |
<asp:TextBox ID="TextBox2" runat="server" ValidationGroup="G1"></asp:TextBox><asp:CompareValidator
ID="CompareValidator1" runat="server" ErrorMessage="兩筆資料不同" ControlToCompare="TextBox1"
ControlToValidate="TextBox2" ValidationGroup="G1"></asp:CompareValidator>
<asp:TextBox ID="TextBox3" runat="server" ValidationGroup="G2"></asp:TextBox>
<asp:CompareValidator ID="CompareValidator2" runat="server" ControlToValidate="TextBox3"
ErrorMessage="請輸入日期格式" Operator="DataTypeCheck" Type="Date" ValidationGroup="G2"></asp:CompareValidator>
<br />
<asp:Button ID="Button2" runat="server" Text="Button" ValidationGroup="b" />
11-4.RegularExpressionValidator 主要屬性如下:
ValidationExpression | 設定要用來驗證輸入的規則運算式。 |
規則運算範例網站http://regexlib.com/
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox><asp:Button ID="Button1"
runat="server" Text="Button" /><asp:RegularExpressionValidator ID="RegularExpressionValidator1"
runat="server" ErrorMessage="RegularExpressionValidator" ControlToValidate="TextBox1"
ValidationExpression="\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*"></asp:RegularExpressionValidator>
11-5.CustomValidator 主要屬性如下:
ClientValidationFunction | 指定Client端的javascript名稱 |
主要事件如下:
ServerValidate | 撰寫Server端的邏輯運算 |
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
<asp:Button ID="Button1" runat="server" Text="Button" />
<asp:CustomValidator ID="CustomValidator1" runat="server" ClientValidationFunction="Client_Validate"
ControlToValidate="TextBox1" ErrorMessage="必須為偶數" OnServerValidate="CustomValidator1_ServerValidate"> </asp:CustomValidator>
用戶端的程式
<script type="text/javascript">
function Client_Validate(sender, e) {
if (e.Value % 2 == 0)
e.IsValid = true;
else
e.IsValid = false;
}
</script>
伺服器端的事件
<script runat="server">
protected void CustomValidator1_ServerValidate(object source, ServerValidateEventArgs args)
{
if (Convert.ToDecimal(args.Value) % 2 == 0)
args.IsValid = true;
else
args.IsValid = false;
}
</script>
範例下載:ASP_C_Validate.rar
沒有留言:
張貼留言