Sto cercando di scoprire come sfruttare il mio codice SQL

3

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();
    
posta Orca 17.03.2011 - 10:32
fonte

2 risposte

2

Sì, quello che hai è al sicuro. Supponendo che i dati in MyTable non siano "eseguiti" in alcun modo.

Se dovessi selezionare la colonna MyFirst o MySecond da MyTable e poi passarla a EXEC senza utilizzare la sintassi dei parametri che hai descritto sopra, allora sarebbe male. In pratica, non passare mai una stringa immessa dall'utente come primo parametro su EXEC o sp_executesql.

    
risposta data 24.03.2011 - 00:27
fonte
6

L'attacco di SQL injection del troncamento non si applica solo ai costrutti di query dinamici / concatenati?

    
risposta data 17.03.2011 - 15:49
fonte

Leggi altre domande sui tag