报表准备和数据清理

问题描述 投票:0回答:2

[当使用经典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推送用户输入的所有内容吗?

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

asp-classic prepared-statement
2个回答
0
投票

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


0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.