亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

在ASP.NET中創建安全的web站點(配置)

2019-11-18 16:40:54
字體:
來源:轉載
供稿:網友

以前用asp,php,jsp編寫網站代碼的時候,站點安全性總是一件頭疼的事情,雖然我們編寫了用戶登錄,注冊,驗證頁面,但是效果總是不理想。有時候我們不得不用大量的session變量來存放相關信息,處處設防。而在.NET環境下,這個問題處理起來就非常容易了。關鍵是要充分理解web.config文件。首先,介紹一下web.config文件。

<?xml version="1.0" encoding="utf-8" ?>
<configuration>

<system.web>

<!-- 動態調試編譯
設置 compilation debug="true" 以將調試符號(.pdb 信息)
插入到編譯頁中。因為這將創建執行起來
較慢的大文件,所以應該只在調試時將該值設置為 true,而所有其他時候都設置為
false。有關更多信息,請參考有關
調試 asp.net 文件的文檔。
-->
<compilation defaultLanguage="vb" debug="true" />

<!-- 自定義錯誤信息
設置 customErrors mode="On" 或 "RemoteOnly" 以啟用自定義錯誤信息,或設置為 "Off" 以禁用自定義錯誤信息。
為每個要處理的錯誤添加 <error> 標記。
-->
<customErrors mode="RemoteOnly" />

<!-- 身份驗證
此節設置應用程序的身份驗證策略??赡艿哪J绞?/“Windows/”、
/“Forms/”、/“Passport/”和 /“None/”
-->
<authentication mode="Windows" />


<!-- 授權
此節設置應用程序的授權策略。可以允許或拒絕用戶或角色訪問
應用程序資源。通配符:"*" 表示任何人,"?" 表示匿名
(未授權的)用戶。
-->
<authorization>
<allow users="*" /> <!-- 允許所有用戶 -->

<!-- <allow users="[逗號分隔的用戶列表]"
roles="[逗號分隔的角色列表]"/>
<deny users="[逗號分隔的用戶列表]"
roles="[逗號分隔的角色列表]"/>
-->
</authorization>

<!-- 應用程序級別跟蹤記錄
應用程序級別跟蹤在應用程序內為每一頁啟用跟蹤日志輸出。
設置 trace enabled="true" 以啟用應用程序跟蹤記錄。如果 pageOutput="true",則
跟蹤信息將顯示在每一頁的底部。否則,可以通過從 Web 應用程序
根瀏覽 "trace.axd" 頁來查看
應用程序跟蹤日志。
-->
<trace enabled="false" requestLimit="10" pageOutput="false" traceMode="SortByTime" localOnly="true" />


<!-- 會話狀態設置
默認情況下,ASP.NET 使用 cookie 標識哪些請求屬于特定的會話。
如果 cookie 不可用,則可以通過將會話標識符添加到 URL 來跟蹤會話。
若要禁用 cookie,請設置 sessionState cookieless="true"。
-->
<sessionState
mode="InWord="
cookieless="false"
timeout="20"
/>

<!-- 全球化
此節設置應用程序的全球化設置。
-->
<globalization requestEncoding="utf-8" responseEncoding="utf-8" />

</system.web>

</configuration>

好了,相信看過上面的介紹以后,對web.config文件一定非常了解了吧。下面我們就切入主題。為了防止用戶沒有經過驗證就訪問站點,我們的處理方法是當用戶沒有通過驗證的時候點擊任何頁面將會直接跳到Login.aspx頁面,具體代碼如下:

<authentication mode="Forms">
<forms name="yourAuthCookie" loginUrl="login.aspx"
protection="All" path="/" />
</authentication>
<authorization>
<deny users="?" />
</authorization>
但是這樣會產生一個問題,那就是如果我的站點有一些信息是可以讓任意用戶隨意訪問的,比如站點簡介,使用說明等。如果按照上面的處理方法豈不讓用戶覺得很麻煩,呵呵,不急,在ASP.NET中自然有相應的解決辦法。下面的代碼可以實現匿名用戶訪問Test.aspx頁面:

<location path="test.aspx">
<system.web>
<authorization>
<allow users="?" />
</authorization>
</system.web>
</location>

解決了上面兩個問題,相信大家心里一定有底了吧。下面就開始實現login.aspx頁面。利用C#和SQL Server2000,創建一個webform頁面,加入相應的控件。具體代碼如下:

<%@ Page language="c#" Codebehind="login.aspx.cs"
AutoEventWireup="false" Inherits="secure.login" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
<HEAD>
<title>Secure Site</title>
<meta content="Microsoft Visual Studio 7.0" name="GENERATOR">
<meta content="C#" name="CODE_LANGUAGE">
<meta content="javaScript" name="vs_defaultClientScript">
<meta content="</HEAD>
<body MS_POSITIONING="GridLayout">
<form id="login" method="post" runat="server">
<table cellSpacing="0" cellPadding="0" border="0">
<tr>
<td vAlign="top" align="left">
<asp:label id="Message" Runat="server" ForeColor="#ff0000">
</asp:label>
</td>
</tr>
<tr>
<td vAlign="top" align="left">
<b>E-mail:</b>
</td>
</tr>
<tr>
<td vAlign="top" align="left">
<asp:textbox id="username" Runat="server" Width="120">
</asp:textbox>
</td>
</tr>
<tr>
<td vAlign="top" align="left">
<b>Password:</b>
</td>
</tr>
<tr>
<td vAlign="top" align="left">
<asp:textbox id="password" Runat="server"
Width="120" TextMode="Password">
</asp:textbox>
</td>
</tr>
<tr>
<td vAlign="top" align="left">
<asp:checkbox id="saveLogin" Runat="server"
Text="<b>Save my login</b>">
</asp:checkbox>
</td>
</tr>
<tr>
<td vAlign="top" align="right">
<asp:imagebutton id="btnLogin" Runat="server"
ImageUrl="/images/w2k/login/btnLogin.gif">
</asp:imagebutton>
</td>
</tr>
</table>
</form>
</body>
</HTML>


界面做好之后,就開始編寫提交按鈕事件,首先需要注冊該事件,代碼如下:

private void InitializeComponent()
{
this.btnLogin.Click += new System.Web.UI.ImageClickEventHandler(this.btnLogin_Click);
.
.
.
}
事件注冊好之后,自然就是編寫事件處理函數了:

private void btnLogin_Click(object sender, System.Web.UI.ImageClickEventArgs e)
{
CCommonDB sql = new CCommonDB();
string redirect = "";

if((redirect = sql.AuthenticateUser(this.Session, this.Response,
username.Text, password.Text, saveLogin.Checked)) != string.Empty)
{
// Redirect the user
Response.Redirect(redirect);
}
else
{
Message.Text = "Login Failed!";
}
}
讀者看完上面的代碼之后一定想問CCommonDB是哪里來的東東,這是我編寫的一個類,用來處理用戶登錄信息的,如果成功則把相關信息寫入session、Cookie和SQL
數據庫,同時跳到default.aspx頁面。具體如下:

CCommonDB.cs

namespace secure.Components
{
public class CCommonDB : CSql
{
public CCommonDB() : base() { }

public string AuthenticateUser(
System.Web.SessionState.HttpSessionState objSession, // Session Variable
System.Web.HttpResponse objResponse, // Response Variable
string email, // Login
string password, // Password
bool bPersist // Persist login
)
{
int nLoginID = 0;
int nLoginType = 0;

// Log the user in
Login(email, password, ref nLoginID, ref nLoginType);

if(nLoginID != 0) // Success
{
// Log the user in
System.Web.Security.FormsAuthentication.SetAuthCookie(nLoginID.ToString(), bPersist);

// Set the session varaibles
objSession["loginID"] = nLoginID.ToString();
objSession["loginType"] = nLoginType.ToString();

// Set cookie information incase they made it persistant
System.Web.HttpCookie wrapperCookie = new System.Web.HttpCookie("wrapper");
wrapperCookie.Value = objSession["wrapper"].ToString();
wrapperCookie.Expires = DateTime.Now.AddDays(30);

System.Web.HttpCookie lgnTypeCookie = new System.Web.HttpCookie("loginType");
lgnTypeCookie.Value = objSession["loginType"].ToString();
lgnTypeCookie.Expires = DateTime.Now.AddDays(30);

// Add the cookie to the response
objResponse.Cookies.Add(wrapperCookie);
objResponse.Cookies.Add(lgnTypeCookie);

return "/candidate/default.aspx";
}
case 1: // Admin Login
{
return "/admin/default.aspx";
}
case 2: // Reporting Login
{
return "/reports/default.aspx";
}
default:
{
return string.Empty;
}
}
}
else
{
return string.Empty;
}
}

/// <summary>
/// Verifies the login and password that were given
/// </summary>
/// <param name="email">the login</param>
/// <param name="password">the password</param>
/// <param name="nLoginID">returns the login id</param>
/// <param name="nLoginType">returns the login type</param>
public void Login(string email, string password, ref int nLoginID, ref int nLoginType)
{
ResetSql();

DataSet ds = new DataSet();

// Set our parameters
SqlParameter paramLogin = new SqlParameter("@username", SqlDbType.VarChar, 100);
paramLogin.Value = email;

SqlParameter paramPassword = new SqlParameter("@password", SqlDbType.VarChar, 20);
paramPassword.Value = password;


Command.CommandType = CommandType.StoredProcedure;
Command.CommandText = "glbl_Login";
Command.Parameters.Add(paramLogin);
Command.Parameters.Add(paramPassword);

Adapter.TableMappings.Add("Table", "Login");
Adapter.SelectCommand = Command;
Adapter.Fill(ds);

if(ds.Tables.Count != 0)
{
DataRow row = ds.Tables[0].Rows[0];

// Get the login id and the login type
nLoginID = Convert.ToInt32(row["Login_ID"].ToString());
nLoginType = Convert.ToInt32(row["Login_Type"].ToString());
}
else
{
nLoginID = 0;
nLoginType = 0;
}
}
}

abstract public class CSql
{
private SqlConnection sqlConnection; // Connection string
private SqlCommand sqlCommand; // Command
private SqlDataAdapter sqlDataAdapter; // Data Adapter
private DataSet sqlDataSet; // Data Set

public CSql()
{
sqlConnection = new SqlConnection(ConfigurationSettings.AppSettings["ConnectionString"]);
sqlCommand = new SqlCommand();
sqlDataAdapter = new SqlDataAdapter();
sqlDataSet = new DataSet();

sqlCommand.Connection = sqlConnection;
}

/// <summary>
/// access to our sql command
/// </summary>
protected SqlCommand Command
{
get { return sqlCommand; }
}

/// <summary>
/// Access to our data adapter
/// </summary>
protected SqlDataAdapter Adapter
{
get { return sqlDataAdapter; }
}

/// <summary>
/// Makes sure that everything is clear and ready for a new query
/// </summary>
protected void ResetSql()
{
if(sqlCommand != null)
{
sqlCommand = new SqlCommand();
sqlCommand.Connection = sqlConnection;
}
if(sqlDataAdapter != null)
sqlDataAdapter = new SqlDataAdapter();

if(sqlDataSet != null)
sqlDataSet = new DataSet();
}

/// <summary>
/// Runs our command and returns the dataset
/// </summary>
/// <returns>the data set</returns>
protected DataSet RunQuery()
{
sqlDataAdapter.SelectCommand = Command;

sqlConnection.Open();
sqlConnection.Close();

sqlDataAdapter.Fill(sqlDataSet);

return sqlDataSet;
}
}
}

http://blog.csdn.net/tielu0144/archive/2007/02/05/1502894.aspx


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品视频色| 国产欧美欧洲在线观看| 国产欧美日韩最新| 国产精品人成电影在线观看| 色天天综合狠狠色| 久久精品美女视频网站| 高跟丝袜一区二区三区| 国产成人拍精品视频午夜网站| 日韩中文在线视频| 国产69精品久久久久9999| 亚洲第一页在线| 欧美精品第一页在线播放| 欧美特级www| 麻豆国产精品va在线观看不卡| 欧美精品激情视频| 国产精品久久久久久av下载红粉| 久久99精品国产99久久6尤物| 美女精品久久久| 2024亚洲男人天堂| 日韩av大片在线| 久久视频这里只有精品| 日韩中文字幕免费视频| 亚洲人午夜精品免费| 久久国产精品久久久| 亚洲男人天堂网站| 亚洲黄页网在线观看| 精品亚洲一区二区| 久久综合电影一区| 久久精品在线播放| 亚洲欧美制服中文字幕| 欧美国产日产韩国视频| 国产视频亚洲精品| 亚洲自拍小视频| 日韩成人黄色av| 精品国产91久久久| 亚洲成人黄色网址| 久久久亚洲天堂| 好吊成人免视频| 1769国内精品视频在线播放| 亚洲日本欧美中文幕| 91在线观看免费观看| 成人乱人伦精品视频在线观看| 日韩电影免费观看中文字幕| 国产69精品久久久| 91精品国产乱码久久久久久久久| 国产精品视频网站| 日韩在线欧美在线国产在线| 欧美日韩国产va另类| 亚洲va欧美va在线观看| 久久精品影视伊人网| 亚洲天堂av综合网| 国产成人精品午夜| 正在播放欧美一区| 这里只有精品丝袜| 国产在线拍揄自揄视频不卡99| 久久成人一区二区| 欧美极品xxxx| 国模吧一区二区三区| 日韩免费看的电影电视剧大全| 国产亚洲人成a一在线v站| 亚洲精品色婷婷福利天堂| 亚洲视频电影图片偷拍一区| www.99久久热国产日韩欧美.com| 国产精品久久97| 在线视频亚洲欧美| 国产热re99久久6国产精品| 亚洲一区二区三区777| 中日韩午夜理伦电影免费| 欧美日韩国产va另类| 日韩久久免费视频| 91国语精品自产拍在线观看性色| 亚洲欧美综合另类中字| 欧美精品18videos性欧美| 欧美亚洲在线视频| 国产精品成人aaaaa网站| 7m第一福利500精品视频| 欧美性猛交xxxx久久久| 91欧美日韩一区| 国产精品露脸自拍| 国产一区二区三区在线免费观看| 热re99久久精品国产66热| 欧美在线一区二区视频| 亚洲精品中文字幕女同| 久久久久久久一区二区三区| 久久久999精品视频| 色偷偷噜噜噜亚洲男人的天堂| 国产综合在线看| 久久久久99精品久久久久| 国产综合在线观看视频| 992tv在线成人免费观看| 欧美亚洲视频一区二区| 亚洲黄色免费三级| 91精品久久久久久久久久久久久久| 日韩精品久久久久久久玫瑰园| 伊人亚洲福利一区二区三区| 免费91麻豆精品国产自产在线观看| 久久久久久久久亚洲| 日韩毛片中文字幕| 日韩高清av一区二区三区| 欧美激情中文字幕乱码免费| 欧美黑人极品猛少妇色xxxxx| 性色av一区二区三区免费| 久久久中文字幕| 国产综合视频在线观看| 中文日韩在线视频| 亚洲国产高清自拍| 亚洲一区制服诱惑| 国产精自产拍久久久久久蜜| 91av在线精品| 国产精品久久99久久| 91性高湖久久久久久久久_久久99| 国产精品成人va在线观看| 视频在线一区二区| 美女久久久久久久| 国产主播在线一区| 韩国福利视频一区| 91成人免费观看网站| 亚洲一区二区少妇| 亚洲免费福利视频| 欧美日韩中文字幕| 欧美视频不卡中文| 欧美午夜精品久久久久久浪潮| 精品中文字幕在线| 韩国19禁主播vip福利视频| 欧美激情精品久久久久| 91精品国产91久久久久久最新| 久久国产精彩视频| 亚洲乱码av中文一区二区| 国产视频福利一区| 91精品中国老女人| 国产精欧美一区二区三区| 最近2019年好看中文字幕视频| 日韩国产精品一区| 91久久综合亚洲鲁鲁五月天| 91精品一区二区| 最新中文字幕亚洲| 91日本视频在线| 97精品伊人久久久大香线蕉| 国产精品久久77777| 久久成人这里只有精品| 97在线观看视频国产| 日韩在线免费视频| 亚洲自拍偷拍视频| 日韩专区中文字幕| 久久99精品国产99久久6尤物| 亚洲人成人99网站| 日韩精品日韩在线观看| 亚洲午夜女主播在线直播| 日韩中文在线中文网在线观看| 久久精品久久久久电影| 亚洲一区二区在线播放| 欧美大片欧美激情性色a∨久久| 91亚洲人电影| 国产精品永久免费视频| 91理论片午午论夜理片久久| 午夜精品一区二区三区在线视频| 91在线观看欧美日韩| 欧美在线观看日本一区| 国产偷亚洲偷欧美偷精品| 亚洲国产精品久久精品怡红院| 欧美超级免费视 在线| 日韩精品免费在线播放| 欧美黑人性生活视频| 国产精品海角社区在线观看|