About SQL Injection
Many vulnerabilities exist allowing hackers to steal data from organizations and SQL Injection is one of them. It is perhaps one of the most common application layer attack techniques used today. When improper coding of the web application is done then a hacker can inject into SQL commands. By using SQL commands a hacker can steal your data, they can modify your details and they can delete your data permanently.
In simple terms, SQL injection is nothing but it a technique where malicious users can inject SQL commands into an SQL statement, via webpage input and this input can break the security of the web application.
Now we understand how SQL Injection can be done in ASP .NET websites.
Let's take an example. Suppose you have a Login Table inside your database such as follows:
- Create table Login
- (
- id int primary key,
- Name varchar(50),
- Email varchar(50),
- Password varchar(50)
- )
And in this table you have some data such as the following.
- Insert into Login values(1, 'Sourabh Somani', '[email protected]', 'password');
- Insert into Login values(2, 'Shaili Dashora', '[email protected]' 'password');
- Insert into Login values(3, 'Divya Sharma', '[email protected]', 'password');
- Insert into Login values(4, 'Swati Soni', '[email protected]', 'password');
Now I am creating a Login page using the following code with a Login Control.
- <asp:login id="Login1" runat="server" onauthenticate="Login1_Authenticate" width="331px"
- backcolor="#F7F6F3" bordercolor="#E6E2D8" borderpadding="4" borderstyle="Solid"
- borderwidth="1px" font-names="Verdana" font-size="0.8em" forecolor="#333333"
- height="139px">
- <InstructionTextStyle Font-Italic="True" ForeColor="Black" />
- <LoginButtonStyle BackColor="#FFFBFF" BorderColor="#CCCCCC" BorderStyle="Solid" BorderWidth="1px" Font-Names="Verdana" Font-Size="0.8em" ForeColor="#284775" />
- <TextBoxStyle Font-Size="0.8em" />
- <TitleTextStyle BackColor="#5D7B9D" Font-Bold="True" Font-Size="0.9em" ForeColor="White" />
- </asp:login>
Now double-click on the Login control and generate a Login1_Authenticate event handler.
- protected void Login1_Authenticate(object sender, AuthenticateEventArgs e)
- {
- }
- protected void Login1_Authenticate(object sender, AuthenticateEventArgs e)
- {
- SqlConnection con = new SqlConnection(@"Data Source=.\sqlexpress;Initial Catalog=MyDb;Integrated Security=True");
- string qry="select * from MyTable where Email='"+Login1.UserName+"'and Password='"+Login1.Password+"' ";
- adpt = new SqlDataAdapter(qry,con);
- dt = new DataTable();
- adpt.Fill(dt);
- if (dt.Rows.Count >= 1)
- {
- Response.Redirect("index.aspx");
- }
- }
Now press F5 to run this project. On the run-time we will see the How SQL Injection can be done...?
After running the output will be:
SQL Injection when an attacker doesn't know the username: If the attacker doesn't know what the username is then he/she simply uses a "1=1" concept as in the following example.
Now if we look at our SQL query then that was:
- string qry="select * from MyTable where Email='"+Login1.UserName+"'and Password='"+Login1.Password+"' ";
- select * from MyTable where Email='' or 1=1--'and Password=''
SQL Injection when the attacker does know the username: If the attacker does know the username then he will never need to apply the 1=1 rule, he will simply write username + ' in the TextBox and comment out everything following such as in the following.
So now depending on the username our query will be like this:
- select * from MyTable where Email='[email protected]'--and Password=''
How SQL Injection can be dangerous
Suppose an attacker knows the information about the SQL, then he can also modify the database. For example, suppose an attacker knows the name of the table. He can then also insert, delete, update, alter and so on command inside the SQL.
For this see the following example.
Example: My table name is MyTable and if I want to delete data from the table then my query will be "Delete from MyTable".
How to apply this query in a TextBox
So by providing the username query above it will look such as the following.
- select * from MyTable where Email='' Delete from MyTable --'and Password=''
If you want to check whether or not the data was deleted from the database then just go to SQL Express and select all the data using a selection query as in the following:
This was all about SQL Injection.
Note: Inside an Index.aspx page I have just written the following code:
- <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Index.aspx.cs" Inherits="Index" %>
- <!DOCTYPE html>
- <html xmlns="http://www.w3.org/1999/xhtml">
- <head id="Head1" runat="server">
- <title></title>
- </head>
- <body>
- <form id="form1" runat="server">
- <div>
- <center>
- <h1>
- HELLO
- <br />
- C# CORNER
- </h1>
- </center>
- </div>
- </form>
- </body>
- </html>

Rakesh RavalPosted Jan 27, 2022, 5:39 AM
We need a solution, how to secure our API for SQL injection
Kaushik Roy ChowdhuryPosted Sep 11, 2020, 5:22 AM
This is all outdated stuff as nobody uses Web Forms these days. The programming world has already left ASP.NET framework and moved to asp.net core where we use EF Core and you don't need to write dynamic SQL queries at all which are open to SQL injection attacks. Say something that's relevant with present day technologies.
nedam pozabiPosted Jun 3, 2020, 4:38 AM
The accompanying files are poorly made and buggy
Khargesh RajputPosted Mar 13, 2015, 6:44 AM
nice
PATEL UTSAVPosted Feb 9, 2015, 12:22 PM
what is this Email='"+Login1.UserName+"'and Password='"+Login1.Password+"' ";
Phalguni BhuyanPosted Jan 31, 2014, 5:21 AM
Very beautiful article about sql injection.Can you please explain same thing in ASP.NET MVC
Asif KhanPosted Jan 23, 2014, 7:36 AM
nicely explained
Saineshwar BageriPosted Jan 19, 2014, 11:38 PM
nice article