Sto cercando di trovare un modo per sfruttare la mia stored procedure per testare i problemi di sicurezza, ho appositamente testato per l'iniezione basata su troncamenti SQL, ma non ci sono riuscito finora; Non penso che sia necessariamente perché il codice è immune all'iniezione SQL, ma forse perché i miei casi di test non sono stati approfonditi, quindi questo codice è sfruttabile? Esempio?
USE [MyDB]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [dbo].[sp_mySP]
@Myfirst nvarchar(10),
@Mysecond nvarchar(400)
AS
BEGIN
DECLARE @SQLString nvarchar(MAX);
DECLARE @ParmDefinition nvarchar(MAX);
SET NOCOUNT ON;
SET @SQLString = N'insert into MyTable (Myfirst, Mysecond) values (@first,@second)';
SET @ParmDefinition = N'@first nvarchar(10),@second nvarchar(400)';
exec sp_executesql
@SQLString,@ParmDefinition,
@first = @Myfirst,
@second = @Mysecond;
END
Per la cronaca, ecco il codice .NET che accede al database, tuttavia voglio che la stored procedure sia sicura da sola, senza supposizioni sulla funzione di chiamata.
cmd = new SqlCommand("sp_mySP", Con); //The SQL Command
cmd.CommandType = CommandType.StoredProcedure;
//Parameters
SqlParameter first = new SqlParameter("@Myfirst", SqlDbType.NVarChar, 10);
SqlParameter second= new SqlParameter("@Mysecond", SqlDbType.NVarChar, 400);
first.Value = "value-here";// <-- Definitely not the test cases I used
second.Value = "value-here";
cmd.Parameters.Add(first);
cmd.Parameters.Add(second);
Con.Open();
cmd.ExecuteScalar();