User Name Password Register
DaniWeb IT Discussion Community
All
What is DaniWeb IT Discussion Community?
You're currently browsing the ASP.NET section within the Web Development category of DaniWeb, a massive community of 374,018 software developers, web developers, Internet marketers, and tech gurus who are all enthusiastic about making contacts, networking, and learning from each other. In fact, there are 2,696 IT professionals currently interacting right now! Registration is free, only takes a minute and lets you enjoy all of the interactive features of the site.
Please support our ASP.NET advertiser: Lunarpages ASP Web Hosting
Views: 5281 | Replies: 5
Reply
Join Date: Feb 2003
Location: Canada
Posts: 786
Reputation: Paladine has a spectacular aura about Paladine has a spectacular aura about Paladine has a spectacular aura about 
Rep Power: 9
Solved Threads: 26
Colleague
Paladine's Avatar
Paladine Paladine is offline Offline
Master Poster

ASP.Net Security 101 Part 1

  #1  
Jul 14th, 2005
This is a start to a tutorial on Security in ASP.NET 1.1 using VB.Net code behind.

SETUP:
** Note this tutorial builds on/off the Updatedimple ASP.Net Login Page tutorial **


Login.aspx HTML Code:

<%@ Page Language="vb" AutoEventWireup="false" Codebehind="Login.aspx.vb" Inherits="NorthLogin3.WebForm1"%>
<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
<html>
	<head>
	    <title>Northwind Database Login</title>
		<meta content="Microsoft Visual Studio .NET 7.1" name="GENERATOR">
		<meta content="Visual Basic .NET 7.1" name="CODE_LANGUAGE">
		<meta content="JavaScript" name="vs_defaultClientScript">
		<meta content="http://schemas.microsoft.com/intellisense/ie5" name="vs_targetSchema">
		<!-- <summary>
			|||||	Style Sheet |||||
			</summary>
	    --><link title="standard" href="Styles.css" type="text/css" rel="stylesheet">
	</head>
	<body>
		<!-- |||||	Login Form	||||| -->
		<form id="frmlogin" method="post" runat="server">
		    <table id="mainTable" border="0">
		        <tr>
		    	    <td>
		    		    <table class="t_border" id="loginTable" cellspacing="15" cellpadding="0">
		    		        <tr>
					   <td><b>Login: </b>
					   </td>
					   <td><asp:textbox id="txtUserName" runat="server" width="160px"></asp:textbox><asp:requiredfieldvalidator id="rvUserValidator" runat="server" controltovalidate="txtUserName" errormessage="You must supply a Username!"
		 		 		 display="None"></asp:requiredfieldvalidator></td>
		    		        </tr>
		    		        <tr>
					   <td><b>Password: </b>
					   </td>
					   <td><asp:textbox id="txtPassword" runat="server" width="160px" textmode="Password"></asp:textbox><asp:requiredfieldvalidator id="rvPasswordValidator" runat="server" controltovalidate="txtPassword" errormessage="Empty Passwords not accepted"
		 		 		 display="None"></asp:requiredfieldvalidator></td>
		    		        </tr>
		    		        <tr>
		 		 		<td align="center" colspan="2"><asp:button id="cmdSubmit" runat="server" text="Submit" borderstyle="Solid"></asp:button></td>
		    		        </tr>
		    		    </table>
		    	    </td>
		        </tr>
		        <tr>
		    	    <td>
		    		    <table id="messageDisplay">
		    		        <tr>
					   <td><asp:validationsummary id="Validationsummary1" runat="server" width="472px" displaymode="BulletList"></asp:validationsummary></td>
		    		        </tr>
		    		    </table>
		    		    <asp:hyperlink id="hl_Register" runat="server" navigateurl="Register.aspx" font-size="X-Small"
		    		        height="8px" width="209px" font-names="MS Reference Sans Serif">New User?...Register Here!</asp:hyperlink>
		    	    </td>
		        </tr>
			</table>
		</form>
	    <asp:label id="lblMessage" runat="server" width="288px" font-bold="True" font-italic="True"
		    font-size="Medium" forecolor="#C00000"></asp:label>
	    <asp:label id="lblMessage2" runat="server" width="288px" font-bold="True" font-italic="True"
		    font-size="Medium" forecolor="#C00000"></asp:label>
	    <!--	|||||    End of Form	|||||    -->
	</body>
</html>

http://www3.telus.net/public/tmlohnes/ExampleLogin.jpg

ASP.NET Security Data Flow:

Web Client makes request --> IIS performs some basic HTTP authentication procedures --> ASP.NET uses the authentication toke that was passed to it by IIS --> ASP.Net authenticates & authorizes the client via web.config --> CLR (Common Language Runtime) performs more indepth checks --> via ASP.NET impersonation the Operating System then processes the request to its conclusion.

Forms Authentication:

With ASP.Net you can opt to authenticate not through IIS but through your application via Forms Authentication.

Scenario -->



  • Client Requests Page on your site<<<<<<
  • If the request does not contain a valid authentication cookie, your web server redirects the client to the URL specified in the loginUrl attribute of the Authentication tag in your web.config file. The URL will be the location of the Login form page for the client.<<<<<<
  • Credentials are entered into the form and submitted via a form post.<<<<<<
  • If valid, and AuthCookie is generated<<<<<<
  • The client is then redirected to the originally requested page. <<<<<<
Code to add to Web.Config (Forms Authentication) - partial Web.Config Listing:
<!-- If the AuthCookie is not found the user is redirected to the loginUrl -->
    <authentication mode="Forms">
	    <forms name="AuthCookie" path="/" loginUrl="Login.aspx" protection="All">
		    <credentials passwordFormat="Clear">
		    	<user name="admin" password="admin" />
		    </credentials>
		</forms>
	</authentication>

	<!--  AUTHORIZATION 
		 This section sets the authorization policies of the application. You can allow or deny access
		 to application resources by user or role. Wildcards: "*" mean everyone, "?" means anonymous 
		  (unauthenticated) users.
	-->
    <authorization>

Notice the passwordFormat is set to Clear. This attribute can have these values; Clear = No encryption, or MD5 or SHA1, which are well known encryption algorithms. Which I will dicuss in updates to this tutorial.


Required Imports:
Imports System.Web.Security	 '   ||||||   Required Class for Authentication
Imports System.Data			 '   ||||||   DB Accessing Import
Imports System.Data.SqlClient   '   ||||||   SQL Server Import
Imports System.Configuration    '   ||||||   Required for Web.Config appSettings |||||


Login.aspx Code Behind for the OnClick of the Submit Button(in VB.NET):

 Private Sub cmdSubmit_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdSubmit.Click
		If Page.IsValid Then    '   ||||| Meaning the Control Validation was successful!
		    '   |||||   Connect to Database for User Validation |||||

		    If FormsAuthentication.Authenticate(txtUserName.Text.Trim(), txtPassword.Text.Trim()) Then
			    FormsAuthentication.SetAuthCookie(txtUserName.Text, False)
				Response.Redirect("default.aspx")
			Else
			    lblMessage.Text = "Invalid Login!"
			End If
		End If

	End Sub



When the client is authenticated, a cookie named AuthCookie is created. If this cookie is not present, the user is redirected to the LoginUrl of Login.aspx, which contains the form that allows the user to login in.

In the code behind the username is passed into the Cookie and the cookie is set to NOT persist when the user closes their browser. You would want this to happen, otherwise if someone else was to use the clients' browser they would automatically login with the first persons credentials. Security Breach!

In our scenario the user requests a page that is restricted, and ASP.Net automatically sends them to the loginUrl. The requested URL is stored in the querystring object, which we can use when the client logins in successfully. We use this stored querystring value to take them directly to that orignally requestd URL/Page.

How? With the FormsAuthentication.RedirectFromLoginPage method. This method does two things for us; it sets the authentication cookie exactly like the SetAuthCookie method, but it also causes a redirect back to the originally requested URL stored in the querystring.



Updated Login.aspx Code Behind - utilizing RedirectFromLoginPage:

Private Sub cmdSubmit_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdSubmit.Click
		If Page.IsValid Then    '   ||||| Meaning the Control Validation was successful!
		    '   |||||   Connect to Database for User Validation |||||

		    If DBConnection(txtUserName.Text.Trim(), txtPassword.Text.Trim()) Then
			    GetUserInfo(txtUserName.Text.Trim())
			 FormsAuthentication.RedirectFromLoginPage(txtUserName.Text, False)  '   |||||   default.aspx Page if no page originally requested!
			 'FormsAuthentication.SetAuthCookie(txtUserName.Text, False)
			 ' ||||| Creates the AuthCookie, and sets it to NOT persist after the browser is closed.
			Else
			    '   |||||   Credentials are Invalid
			    lblMessage.Text = "Invalid Login!"
			End If
		End If
 



It should be made clear that if the client requests this page directly they will be directed to the default.aspx page on successful login.





Code for default.aspx (or any other page to check authentication):
  Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
		 If Not (User.Identity.IsAuthenticated) Then
			 Response.Redirect("Login.aspx")
		 End If
 
	End Sub






You don't have to put the user information in the Web.Config file, but rather you could put the information in a database and build custom routines to authenticate users. Using this approach will disallow you from using the Authenticate method to validate users.

The FormsAuthentication object also contains a SignOut method to log the user out. This removes the authentication cookie, and forces the client to log in again if they want acess to any pages in your application.

You can also use the mode="Passport" in the web.config file in order to use the authentication service (not a Web Service) provided by Microsoft. http://www.passport.com for details on this.

As well you can rely on Windows to process your security, but that is beyond the scope of this tutorial.

Part 2 I will go onto demonstrate SHA1, etc encryption

Happy Coding
Assistant Manager, Regional Pharmacy Information Systems
TLC Services Website (Under Construction)
Updated : ASP.Net Login Code
AddThis Social Bookmark Button
Reply With Quote  
Join Date: Jul 2005
Posts: 8
Reputation: BeeNarak is an unknown quantity at this point 
Rep Power: 0
Solved Threads: 0
BeeNarak BeeNarak is offline Offline
Newbie Poster

Re: ASP.Net Security 101 Part 1

  #2  
Jul 23rd, 2005
Hi Paladine,

I really like your tutorials because they are very straight forward and simple.
Have you ever wrote one on Role-base Security connect to Ms Access?
Are you planning to write one soon?

Thanks in advance,

Bee
Reply With Quote  
Join Date: Feb 2003
Location: Canada
Posts: 786
Reputation: Paladine has a spectacular aura about Paladine has a spectacular aura about Paladine has a spectacular aura about 
Rep Power: 9
Solved Threads: 26
Colleague
Paladine's Avatar
Paladine Paladine is offline Offline
Master Poster

Re: ASP.Net Security 101 Part 1

  #3  
Jul 23rd, 2005
Thanks, I appreciate the complments.

Role based.... I was thinking about that. I will try to piece something together. I may do that one before SHA1 encrytion.

Keep checking back for updates
Assistant Manager, Regional Pharmacy Information Systems
TLC Services Website (Under Construction)
Updated : ASP.Net Login Code
Reply With Quote  
Join Date: Feb 2003
Location: Canada
Posts: 786
Reputation: Paladine has a spectacular aura about Paladine has a spectacular aura about Paladine has a spectacular aura about 
Rep Power: 9
Solved Threads: 26
Colleague
Paladine's Avatar
Paladine Paladine is offline Offline
Master Poster

Re: ASP.Net Security 101 Part 1

  #4  
Jul 25th, 2005
ON REQUEST:

Role Based Security
Windows operating system supports role-based security. A role is basically an defined identity. Usually a role has several identities associated with it. i.e. Your computer at work would more than likely have multiple logins / roles associated with it. An administrator, power-user (may be you), and guests.

In Windows these identities are known as users.

So to add identities you would do so in the Control Panel --> User Account Section.

Under IIS in Windows 2000 & XP --> Properties of the Web Server --> Directory Security --> The Anonymous Access & Authentication Control there is a means of editing your authentication method. The default anonymous access is the IUSR_MachineName username. One other important part to notice is the Check Box labeled Integrated Windows Authentication. With this set, you are able to implement Role based security.

http://www3.telus.net/public/tmlohnes/Image2.jpg


In the web.config file you will have to set the authentication mode to "windows". This signals IIS to look to windows for user accounts.
<authentication mode="windows">
		
	</authentication>


IIS uses three different types of Windows Authentication: Basic, Digest, and NTLM. Basic is the simplest form. You will have probably see this already. You go to a website, and the browser pops up a window asking for a user name and a password. You can see in the above image how to check off Basic setting for your website, or more appropriately you specific application on that webserver (done at the application directory level, and NOT the website level). Once the credentials are entered then IIS will compare these values to the operating system's list of users, and will authenicate or deny the request based on the comparison result.

Digest is simlar, except the Username and password are encrypted before they are sent across the network. This encryption mechanism is known as hashing *Note: Both Digest and Windows Authenication require that your users are running Internet Explorer (ick!).

With NTLM authentication, the user never sees a prompt for credentials, but rather once the browser makes contact with the server, it sends the encrypted username ans password information that the user used to log on to the computer. This is all done invisible to the user.

This is basically role based / windows user based security.
Assistant Manager, Regional Pharmacy Information Systems
TLC Services Website (Under Construction)
Updated : ASP.Net Login Code
Reply With Quote  
Join Date: Nov 2005
Posts: 23
Reputation: Reham Ejaz is an unknown quantity at this point 
Rep Power: 3
Solved Threads: 0
Reham Ejaz Reham Ejaz is offline Offline
Newbie Poster

Re: ASP.Net Security 101 Part 1

  #5  
Dec 25th, 2005
It all might be right i'll surely check these later but right now i am having problem in loading images in my site. I dont understand what's the problem but the image is not displayed intead an empty box is displayed. I am specifying the right path but its still not working. Plz help me as I have to submit my final project and I have only 2 days.
Reply With Quote  
Join Date: Apr 2006
Posts: 1
Reputation: mak101 is an unknown quantity at this point 
Rep Power: 0
Solved Threads: 0
mak101 mak101 is offline Offline
Newbie Poster

Re: ASP.Net Security 101 Part 1

  #6  
Apr 3rd, 2006
Works like charm, only problem is, it doesnt redirect to original calling page. It always redirects to default.aspx.

Here is my code:

[PHP]Protected Sub cmdSubmit_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles cmdSubmit.Click
If Page.IsValid Then ' ||||| Meaning the Control Validation was successful!
' ||||| Connect to Database for User Validation |||||
If Login(txtUserName.Text.Trim(), txtPassword.Text.Trim()) Then
Session("Logged_IN") = "Yes" ' ||||| Use to Validate on other pages in the application
FormsAuthentication.RedirectFromLoginPage(txtUserName.Text, False) ' ||||| default.aspx Page!
Else
' ||||| Credentials are Invalid
lblMessage.Text = "Invalid Login!"
End If
End If
End Sub[/PHP]
Here is my code in page_load event which I need to secure:

[PHP]If Session("Logged_IN").Equals("No") Then
Response.Redirect("Login.aspx")
End If[/PHP]

What am I missing here?
Reply With Quote  
Reply

Only community members can participate in forum threads. You must register or log in to contribute.

Currently Active Users Viewing This Thread: 1 (0 members and 1 guests)

 

DaniWeb ASP.NET Marketplace
Thread Tools Display Modes

Similar Threads
Other Threads in the ASP.NET Forum

All times are GMT -4. The time now is 11:08 pm.
Forum system based on vBulletin Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
©2003 - 2008 DaniWeb® LLC