使用经典ASP防止SQL Server TEXT字段中的SQL注入

时间:2010-08-05 22:28:03

标签: sql sql-server asp-classic sql-injection

我在ASP中有代码,它使用参数化查询将值放入SQL Server的Text字段中。我想知道参数化是否足够,或者我是否必须在字段中搜索潜在的命令,用双刻度替换单个刻度等。文本字段是文章,因此它们可能包含任意数量的单词或字符。

我安全吗?

sSQL="[usp_SaveDocumentGradeCriteria]"
            Set dbCommand = Server.CreateObject("ADODB.Command")    
            Set dbCommand.ActiveConnection = oConn  
            dbCommand.CommandType = adCmdStoredProc 
            dbCommand.Commandtext=sSQL  
            dbCommand.Parameters.Append (dbCommand.CreateParameter("@CriteriaXML", adLongVarChar, adParamInput, len(saveXML), saveXML))
            dbCommand.Parameters.Append (dbCommand.CreateParameter("@Comments", adLongVarChar, adParamInput, len(commentText), commentText))    
            dbCommand.Parameters.Append (dbCommand.CreateParameter("@documentGUID", adGuid, adParamInput, 0, documentGUID)) 
            dbCommand.Parameters.Append (dbCommand.CreateParameter("@graderFYCUserID", adInteger, adParamInput, 0, fycuserid))  
            dbCommand.Parameters.Append (dbCommand.CreateParameter("@graderSequence", adInteger, adParamInput, 0, graderSequence))  
            if trim(grade)<>"" then
                dbCommand.Parameters.Append (dbCommand.CreateParameter("@grade", adInteger, adParamInput, 0, grade))    
            end if


            set oRST=dbCommand.Execute

1 个答案:

答案 0 :(得分:9)

将Text作为参数传递将消除SQL注入以调用存储过程的可能性。但是,这并没有说明存储过程本身,如果它使用动态SQL,它也可以暴露给SQL注入。即使存储过程是安全的,您仍然必须确保在将内容显示到客户端时不会对上传的内容进行任何跨站点脚本编写。

真的是一个端到端的游戏,您必须确保每一步。在调用过程时使用参数是好的,但没有人能够判断是否足够。您必须一直跟踪数据,直到显示回客户端浏览器(如果由JScripts操纵,可能会继续执行...)