04/11/2008, 04:44
|
| | | Fecha de Ingreso: noviembre-2005 Ubicación: Torrelodones, España
Mensajes: 92
Antigüedad: 19 años, 1 mes Puntos: 0 | |
Respuesta: Problema de SQL injection ayuda limpiar bbdd Me respondo a mi mismo por si le puede servir a alguien:
Entramos al SQLManager y en la bbdd en cuestión creas estos dos procedimiento almacenados
Código:
create PROCEDURE FindReplace
(
@TABLE VARCHAR(200),
@Field VARCHAR(200),
@WHERE VARCHAR(100),
@Find VARCHAR(500),
@REPLACE VARCHAR(500)
)
AS
DECLARE @query VARCHAR(8000)
SET @query = 'UPDATE ' + @TABLE +
' SET '+ @Field + '= REPLACE(CONVERT(varchar(8000),'
+ @Field + '),''' + @Find + ''',''' + @REPLACE +''')'
IF(@WHERE <> '')
SET @query = @query + ' WHERE '+@WHERE
EXECUTE (@query)
GO
create Procedure RemoveStringFinal
@FIND VARCHAR(500),
@REPLACE VARCHAR(500)
as
DECLARE @TABLE_NAME VARCHAR(500)
DECLARE @COLUMN_NAME VARCHAR(500)
DECLARE @DATA_TYPE VARCHAR(500)
DECLARE db_cursor CURSOR FOR
select TABLE_NAME, COLUMN_NAME, DATA_TYPE FROM INFORMATION_SCHEMA.COLUMNS
OPEN db_cursor
FETCH NEXT FROM db_cursor INTO @TABLE_NAME, @COLUMN_NAME, @DATA_TYPE
WHILE @@FETCH_STATUS = 0
BEGIN
if @DATA_TYPE = 'varchar' or @DATA_TYPE = 'text' or @DATA_TYPE = 'ntext' or @DATA_TYPE = 'nvarchar'
begin
print @TABLE_NAME
print @COLUMN_NAME
print @DATA_TYPE
EXEC FindReplace @TABLE_NAME,@COLUMN_NAME,'',@FIND,@REPLACE
end
FETCH NEXT FROM db_cursor INTO @TABLE_NAME, @COLUMN_NAME, @DATA_TYPE
END
CLOSE db_cursor
DEALLOCATE db_cursor
Una vez creados ejecutas el segundo del el SQLManager y te pedira la cadena que quieres borrar y cual quieres poner en su lugar. En cuestión de segundos tienes la bbdd limpia.
__________________ Madrid - Zaragoza - Sevilla | www.hucaconsulting.es | Desarrollo gráfico y web a medida |