Креирати .NET Framework апликацију или ASP.NET веб апликацију која демонстрира рањивост апликација/веб апликација на SQL injection.
- Креирајте базу података помоћу SQL Server менаџмент студија под називом TvojePrezimeIme.

База података треба да садржи само једну табелу Users која има поља UserID
(PK, int), Username
(VARCHAR(50)) и Password
(VARCHAR(50)). Унесите неколико слогова у базу података.

- У MS Visual Studio додајте конекцију ка креираној бази података, па креирајте нову .NET Framework апликацију.

Апликација треба да демонстрира безбедан начин креирања SQL упита користећи параметре и небезбедан начин где се цео упит формира као стринг. Предлог како апликација може да изгледа:


usp_Domaci
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [dbo].[usp_Domaci]
@akcija AS INT = NULL,
@uName AS NVARCHAR(50)=null,
@uPass AS NVARCHAR(50) = null AS
IF(@akcija=0)
BEGIN
SELECT U.Username, U.Password FROM Users AS U
END
IF(@akcija=1)
BEGIN
SELECT U.Username, U.Password FROM Users AS U
WHERE U.Username=@uName AND U.Password=@uPass
END
Konekcija.cs
using System.Data;
using System.Data.SqlClient;
namespace Domaci
{
class Konekcija
{
public static SqlCommand GetCommand()
{
SqlConnection con = new SqlConnection("Data Source=MAINFRAME\\SQLEXPRESS;Initial Catalog=Domaci;Integrated Security=True");
SqlCommand cmd = new SqlCommand();
cmd.Connection = con;
cmd.CommandType = CommandType.StoredProcedure;
return cmd;
}
}
}
using System;
using System.Data;
using System.Windows.Forms;
using System.Data.SqlClient;
namespace Domaci
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
PrikaziStanje();
}
private void PrikaziStanje()
{
SqlCommand cmd = Konekcija.GetCommand();
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "usp_Domaci";
cmd.Parameters.AddWithValue("@akcija", 0);
SqlDataAdapter da = new SqlDataAdapter(cmd);
DataTable dt = new DataTable();
try
{
cmd.Connection.Open();
da.Fill(dt);
dataGridView1.DataSource = dt;
dataGridView3.DataSource = dt;
}
catch (Exception e)
{
MessageBox.Show(e.ToString());
}
finally
{
cmd.Connection.Close();
}
}
private void button1_Click(object sender, EventArgs e)
{
string uName = textBox1.Text;
string uPass = textBox2.Text;
UlogujSe(uName, uPass);
PrikaziStanje();
}
private void UlogujSe(string uName, string uPass)
{
SqlCommand cmd = Konekcija.GetCommand();
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "usp_Domaci";
cmd.Parameters.AddWithValue("@akcija", 1);
cmd.Parameters.AddWithValue("@uName", uName);
cmd.Parameters.AddWithValue("@uPass", uPass);
SqlDataAdapter da = new SqlDataAdapter(cmd);
DataTable dt = new DataTable();
try
{
cmd.Connection.Open();
da.Fill(dt);
dataGridView2.DataSource = dt;
}
catch (Exception e)
{
MessageBox.Show(e.ToString());
}
finally
{
cmd.Connection.Close();
}
}
private void button2_Click(object sender, EventArgs e)
{
string uName = textBox3.Text;
string uPass = textBox4.Text;
string cmd = "SELECT Username, Password FROM Users WHERE Username = '" + uName + "' AND Password = '" + uPass + "'";
SqlConnection con = new SqlConnection("Data Source=MAINFRAME\\SQLEXPRESS;Initial Catalog=Domaci;Integrated Security=True");
SqlDataAdapter da = new SqlDataAdapter(cmd, con);
DataTable dt = new DataTable();
try
{
con.Open();
da.Fill(dt);
dataGridView4.DataSource = dt;
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
finally
{
con.Close();
}
}
}
}