Asp classic 准备好的报表和消毒数据

Asp classic 准备好的报表和消毒数据,asp-classic,prepared-statement,Asp Classic,Prepared Statement,将准备好的语句与经典ASP一起使用时,如下所示: SQL = "SELECT user_name, user_sign_up_date FROM tbl_users WHERE this = ? AND id = ? " Set stmt01 = Server.CreateObject("ADODB.Command") stmt01.ActiveConnection = oConn stmt01.Prepared = true stmt01.commandtext = SQL stmt01.P

将准备好的语句与经典ASP一起使用时,如下所示:

SQL = "SELECT user_name, user_sign_up_date FROM tbl_users WHERE this = ? AND id = ? "

Set stmt01 = Server.CreateObject("ADODB.Command")
stmt01.ActiveConnection = oConn
stmt01.Prepared = true
stmt01.commandtext = SQL
stmt01.Parameters.Append stmt01.CreateParameter("@x1", adVarChar, adParamInput, 255, card_pwd)
stmt01.Parameters.Append stmt01.CreateParameter("@x2", adInteger, adParamInput, , this_id)
set myRS = stmt01.Execute
除了进行常规的意义检查,例如确保数字是数字等,使用这种参数化语句的过程是否意味着我不再需要担心,例如,对于varchar或文本字段,清理用户输入的数据-例如,我是否不再需要使用函数通过
Server.HTMLencode
推送用户输入的所有内容


我不确定参数化语句路由是否意味着我可以不那么严格。立即清理用户数据?

如果您担心的是SQL注入攻击,那么参数化应该消除SQL字符串被篡改的可能性,因为这些值是在执行时提供的。

其他人是正确的,您不需要担心参数的内容。你必须担心字符串的长度。我会将
左(card_pwd,255)
传递到
CreateParameter()
以避免异常导致脚本崩溃。我倾向于不担心对整数参数调用
IsNumeric()
,但这可能是值得的(尝试传递废话,看看会发生什么)。

您将两种不同类型的清除混为一谈。SQL参数化可防止“Bobby Tables”漏洞——恶意写入的数据,诱使SQL结束当前查询并执行攻击者选择的单独查询


即使使用SQL参数,攻击者也可以尝试通过(例如)在字段中输入“alert('Gotcha!')”在您的页面上运行脚本。在HTML页面上显示字段数据,然后写出并执行该脚本。为了防止您使用
Server.HTMLencode

什么是“消毒”?你是说SQL注入还是HTML注入?@Dharman@Lankymart不要把维基百科和我联系起来。我的意思是在OP的特殊情况下。卫生是一个如此宽泛而毫无意义的词,它可能意味着任何东西。OP想要净化什么?为什么?@Dharman谢谢你的回答。我想我指的是HTML清理,因为据我所知,在使用参数化语句时,sql注入将被阻止或避免。也许我问的是一个模糊而恼人的问题。如果是,请道歉