苹果的梦想...

享受自己的小快乐
用XML格式代替动态SQL文来减少注入风险(小技巧)

在存储过程中拼写SQL语句是非常普遍的事情,使用...in (n,m,...)也是较常见的.最近在一次应用中因为使用IN拼出来的动态SQL被客户指出,具有被注入的风险.说实在的一般人对sql注入了解的都不多,有这方面经验可能更少,反正任我想破脑袋也想不透如何可能被注入.(也许对方真的注入成功了)这里解决的办法就是将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

 

posted on 2009-03-09 21:40  Redkey  阅读(436)  评论(2)    收藏  举报