Inyeccion de codigo

17/03/2005 - 18:37 por Infoliber | Informe spam
Hola,
mirando el help me parecio que para que no me pudieran inyectar codigo
desde un campo de consulta era mejor poner storedprocedures.

He empezado una aplicacion en asp.net y todas las consultas las hago con
storedProcedures pero no veo el motivo por el cual se evita la inyeccion de
codigo, si yo le paso a un parametro una parte de codigo este se pasa al sql
server, lo veo igual que hacer la consulta sin los storedProcedures.

¿Como se puede evitar la inyeccion de codigo?

Gracias

Preguntas similare

Leer las respuestas

#1 Alejandro Mesa
17/03/2005 - 19:39 | Informe spam
Una forma de evitar inyeccion atraves de los sp es el tipo de dato de los
parametros. Si declaras @par1 como INT entonces que vas a inyectar?. Tambien
si el parametro es por ejemplo char(3), pues no podras inyectar mucho que
digamos. El problema estaria en aquellos sp que usan sql dinamico y esperan
parametros con tipo de datos char / nchar/ varchar / etc., y para poder
inyectar codigo habria que de alguna manera cerrar la cadena.

Ejemplo:

use northwind
go

alter procedure proc1
@par1 nvarchar(40)
as
set nocount on

declare @sql nvarchar(4000)

set @sql = N'
select *
from customers
where companyname = ''' + @par1 + ''''

print @sql
exec sp_executesql @sql
go

create table t(colA int)
go

exec proc1 N'''; drop table t; select 1 where '''' = '''
go

select * from t
go

Fijate en la sentencia que se armo dinamicamente.

Puedes hacer lo siguiente, si vas a usar sql dinamico. Usar sp_executesql y
no EXEC(), usar parametros en el procedimiento sp_executesql o duplicar todos
los apostrofes dentro del parametro pasado.

alter procedure proc1
@par1 nvarchar(40)
as
set nocount on

declare @sql nvarchar(4000)

set @sql = N'
select *
from customers
where companyname = ''' + replace(@par1, '''', '''''') + ''''

print @sql
exec sp_executesql @sql
go

create table t(colA int)
go

exec proc1 N'''; drop table t; select 1 where '''' = '''
go

select * from t
go

drop table t
go

alter procedure proc1
@par1 nvarchar(40)
as
set nocount on

declare @sql nvarchar(4000)

set @sql = N'
select *
from customers
where companyname = @par1'

print @sql
exec sp_executesql @sql, N'@par1 nvarchar(40)', @par1
go

create table t(colA int)
go

exec proc1 N'''; drop table t; select 1 where '''' = '''
go

select * from t
go

drop table t
go


AMB

"Infoliber" wrote:

Mostrar la cita
#2 Alejandro Mesa
17/03/2005 - 19:49 | Informe spam
Correccion, puse los enunciados en el script equivocado.

alter procedure proc1
@par1 nvarchar(40)
as
set nocount on

declare @sql nvarchar(4000)

set @sql = N'
select *
from customers
where companyname = ''' + replace(@par1, '''', '''''') + ''''

print @sql
exec sp_executesql @sql
go

create table t(colA int)
go

exec proc1 N'''; drop table t; select 1 where '''' = '''
go

select * from t
go

drop table t
go

alter procedure proc1
@par1 nvarchar(40)
as
set nocount on

declare @sql nvarchar(4000)

set @sql = N'
select *
from customers
where companyname = @par1'

print @sql
exec sp_executesql @sql, N'@par1 nvarchar(40)', @par1
go

create table t(colA int)
go

exec proc1 N'''; drop table t; select 1 where '''' = '''
go

select * from t
go

drop table t
go


AMB


"Alejandro Mesa" wrote:

Mostrar la cita
#3 Maxi
17/03/2005 - 21:26 | Informe spam
Ojo ALe, hay veces que un SP puede tener un param varcghar(300) y ya ahi
puedes injectar mucho codigo aunque no lo creas, y no es necesario usar
sql-dinamico para que esto suceda


Salu2
Maxi


"Alejandro Mesa" escribió en el
mensaje news:
Mostrar la cita
#4 Alejandro Mesa
17/03/2005 - 21:45 | Informe spam
Hombre, donde has estado?

Mostrar la cita
No se me ocurre como, pudieras exponernos un ejemplo?


AMB




"Maxi" wrote:

Mostrar la cita
#5 Maxi
18/03/2005 - 15:43 | Informe spam
Hola mi amigo, te paso un articulo de Miguel Egea donde muestra algunas
cosas de las que te comente ;)

http://www.configuracionesintegrale...p?articulo4

prometo buscarte algo mas especifico en cuento a los parametros de los sp's
:-)


Salu2
Maxi


"Alejandro Mesa" escribió en el
mensaje news:
Mostrar la cita
Ads by Google
Search Busqueda sugerida