儲存過程與注入

2021-06-16 00:25:30 字數 2024 閱讀 8563

動態構建sql,不可sql注入

create procedure [dbo].[membertestselect2]

(@username nvarchar(50),

@password nvarchar(50))as

begin

set nocount on

declare @err int

declare @sqlstring nvarchar(1000)

select @sqlstring ='select * from [membertest] where [username] = @username and [password]= @password'

select @sqlstring

exec sp_executesql @sqlstring, n'@username nvarchar(50),@password nvarchar(50)',@username, @password

set @err = @@error

return @err

endgo 

動態構建sql,可sql注入

create procedure [dbo].[membertestselect2]

(@username nvarchar(50),

@password nvarchar(50))as

begin

set nocount on

declare @err int

declare @sqlstring nvarchar(1000)

select @sqlstring ='select * from [membertest] where [username] = '''+@username+''' and [password]= '''+@password+''''

select @sqlstring

exec (@sqlstring)

set @err = @@error

return @err

endgo

不可入侵,原因,字元型別長度50, 非動態構建,不可再在裡面寫入or,exe等語句,即無注入點

create procedure [dbo].[membertestselect]

(@username nvarchar(50),

@password nvarchar(50))as

begin

set nocount on

declare @err int

select *

from [membertest]

where

([username] = @username and

[password]= @password)

set @err = @@error

return @err

endgo

select * from membertest

select * from membertest where username='1' and password='1' or 1=1

select * from membertest where username='1' and password='1' or 1=1--'

exec membertestselect '1', '1'-- or 1=1'

exec membertestselect2 @username='1', @password='1'' or 1=1--'

儲存過程可以防注入,這是不正確的

什麼是注入?  

select   *   from   table  

不能根據引數不同而動態生成不同的sql語句, 這個語句無論在哪兒都不能注入, 因為沒有注入口  

select   *   from   table   where   id='傳進來的變數'  

這就叫有注入口 ,  所有無論用sql語句還是sp都一樣

儲存過程也可注入, 只要是動態生成的,有注入口,(如2例)

但是一般儲存過程的引數時,有長度,型別限止的,且一般都不是動態生成的

防止sql注入的儲存過程

function fn escapecmdshellstring description returns an escaped version of a given string with carets added in front of all the special mand shell sym...

儲存過程的注入及解決

由於儲存過程中存在用於字串連線的 號連線sql語句,這就造成sql注入的可能性.下面乙個例子 pr usermanage users batchmove create procedure dbo pr usermanage users batchmove usertype int 1,groupid...

儲存過程與儲存函式

plsql中語法 create or replace procedure 過程名 引數名 in out 型別 asbegin end 宣告pro add sal儲存過程,作用是給指定員工漲1000元工資,並列印出漲前和漲後工資 create orreplace procedure pro add s...