[英]Validating server side with asp.net and c#
目前我在html中有一個簡單注冊表單的網站,這是代碼:
<div class="grid_6 push_3 block alpha">
<div class="grid_6 form_block alpha omega">
<label>שם משתמש</label>
</div>
<div class="grid_6 form_block alpha omega">
<input type="text" id="username" name="username" pattern="^\S{4,}$" required />
</div>
<div class="grid_6 alpha omega form_block">
<label>סיסמא</label>
</div>
<div class="grid_6 form_block alpha omega">
<input type="password" id="password" name="password" pattern="^\S{6,}$" required title="סיסמא צריכה להכיל לפחות 6 תווים" />
</div>
<div class="grid_6 alpha omega form_block">
<label>וודא סיסמא</label>
</div>
<div class="grid_6 form_block alpha omega">
<input type="password" id="password2" pattern="^\S{6,}$" required />
</div>
<div class="grid_6 alpha omega form_block">
<label>כתובת אימייל</label>
</div>
<div class="grid_6 form_block alpha omega">
<input id="email" name="email" type="email" required pattern="[^@]+@[^@]+\.[a-zA-Z]{2,6}" />
</div>
<div class="grid_6 alpha omega form_block">
<label>וודא כתובת אימייל</label>
</div>
<div class="grid_6 form_block alpha omega">
<input type="email" id="email2" required pattern="[^@]+@[^@]+\.[a-zA-Z]{2,6}" />
</div>
<div class="grid_6 form_block alpha omega">
<input name="submit" type="submit" onclick="return validateForm()" value="שלח" />
</div>
</div>
(它實際上被包裝在母版頁的標簽中,這是主人:
<%@ Master Language="C#" AutoEventWireup="true" CodeFile="MasterPage.master.cs" Inherits="MasterPage" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
<link href="css/reset.css" rel="stylesheet" />
<link href="css/text.css" rel="stylesheet" />
<link href="css/963_9_10_10.css" rel="stylesheet" />
<link href="css/style.css" rel="stylesheet" />
<asp:ContentPlaceHolder ID="head" runat="server">
</asp:ContentPlaceHolder>
</head>
<body dir="rtl">
<form runat="server">
<div class="container_9">
<div class="header grid_9">
<a href="Default.aspx"><h1>סיכומים.נט</h1></a>
</div>
<!-- END HEADER -->
<nav>
<ul class="clearfix grid_6 push_3">
<a href="literature.aspx"> <li class="grid_1 alpha literature">ספרות</li></a>
<a href="language.aspx"> <li class="grid_1 language">לשון</li></a>
<a href="civics.aspx"><li class="grid_1 civics">אזרחות</li></a>
<a href="history.aspx"><li class="grid_1 history">היסטוריה</li></a>
<a href="bible.aspx"> <li class="grid_1 bible">תנך</li></a>
<a href="english.aspx"> <li class="grid_1 omega english">אנגלית</li></a>
</ul>
</nav>
<div class="grid_3 pull_6" id="search">
<input type="text" id="search_box" placeholder="הקלד מילות חיפוש"/>
<input type="submit" value="חפש" id="search_button"/>
</div>
<asp:ContentPlaceHolder ID="ContentPlaceHolder1" runat="server">
</asp:ContentPlaceHolder>
<footer class="grid_9">
2013 © כל הזכויות שמורות לסיכומים.נט
</footer>
</div>
<!-- END CONTAINER -->
</form>
</body>
</html>
我還有一個signup.aspx.cs文件,它將注冊信息插入數據庫,如下所示:
public partial class signup : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (Request.Form["submit"] != null) {
register1();
}
}
public void register1()
{
string sql = "INSERT INTO [userinfo] ([username], [password], [email]) VALUES (N'" + Request.Form["username"] + "', N'" + Request.Form["password"] + "', N'" + Request.Form["email"] + "')";
Database.UpdateData(sql);
}
}
我認為到目前為止我做的一切都是正確的(我是html / css以外的任何一個初學者)但如果我犯了任何錯誤,請糾正我。
我現在要做的是在將表單輸入服務器端插入數據庫之前驗證它。 我想檢查它是否遵守我的所有規則,字符長度,匹配字段等等 - 而且還沒有使用用戶名/電子郵件。
我目前正在進行一些基本的javascript驗證,但據我所知,安全性不夠明智。
關於我現在要做什么的解釋(盡可能簡單)會很棒。 理想情況下,我想返回到注冊頁面,並以可自定義的方式列出表單頂部的錯誤。
謝謝
RegularExpressionValidator和CompareValidator將成為你的朋友。
例如:
<asp:RegularExpressionValidator id="valEmail" ControlToValidate="email"
ValidationExpression="[^@]+@[^@]+\.[a-zA-Z]{2,6}"
EnableClientScript="false" ErrorMessage="The email is invalid!"
runat="server" />
和:
<asp:CompareValidator id="valEmails"
ControlToValidate="email" ControlToCompare="email2" Type="String"
EnableClientScript="false" Text="The email addresses must match!"
runat="server" />
或者,您可以將它們整齊地包裝在ValidationSummary控件中。
最后,檢查代碼隱藏中的Page.IsValid。
protected void Page_Load(object sender, EventArgs e)
{
if (Request.Form["submit"] != null && Page.IsValid)
{
register1();
}
}
您可以在此處閱讀其他驗證控件。
最后,修復你的SQL,使其不易受SQL注入攻擊:
string sql = "INSERT INTO [userinfo] ([username], [password], [email]) VALUES (N'" + Request.Form["username"].Replace("'","''") + "', N'" + Request.Form["password"].Replace("'","''") + "', N'" + Request.Form["email"].Replace("'","''") + "')";
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.