用XML格式代替动态SQL文来减少注入风险(小技巧)
在存储过程中拼写SQL语句是非常普遍的事情,使用...in (n,m,...)也是较常见的.最近在一次应用中因为使用IN拼出来的动态SQL被客户指出,具有被注入的风险.说实在的一般人对sql注入了解的都不多,有这方面经验可能更少,反正任我想破脑袋也想不透如何可能被注入.(也许对方真的注入成功了 )这里解决的办法就是将In后的目标字符串以XML方式输入存储过程中,变向的实现IN功能.
)这里解决的办法就是将In后的目标字符串以XML方式输入存储过程中,变向的实现IN功能.
DECLARE @x xml
DECLARE @h INT
SET @x='<PersonInfos><PersonInfo PersonId="25" Organizationid = "58"></PersonInfo><PersonInfo PersonId="26" Organizationid = "61"></PersonInfo></PersonInfos>'
EXEC sp_xml_preparedocument @h OUTPUT, @x
SELECT ....FROM ...
WHERE  
Smt.Person.PersonId in(
SELECT  PersonId FROM
OPENXML( @h, '/PersonInfos/PersonInfo' )
WITH(
PersonId int
) AS xmlTable
) 
EXEC sp_xml_removedocument @h
 
                    
                 
         
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号