我在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
答案 0 :(得分:9)
将Text作为参数传递将消除SQL注入以调用存储过程的可能性。但是,这并没有说明存储过程本身,如果它使用动态SQL,它也可以暴露给SQL注入。即使存储过程是安全的,您仍然必须确保在将内容显示到客户端时不会对上传的内容进行任何跨站点脚本编写。
真的是一个端到端的游戏,您必须确保每一步。在调用过程时使用参数是好的,但没有人能够判断是否足够。您必须一直跟踪数据,直到显示回客户端浏览器(如果由JScripts操纵,可能会继续执行...)