准备好的语句和清理数据
Prepared Statements and sanitizing data
在 Classic 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 字符串被篡改的可能性,因为值是在执行时提供的。
其他是正确的,您无需担心参数的内容。您确实需要担心字符串的长度。我会将 Left(card_pwd, 255)
传递给 CreateParameter()
以避免异常导致脚本崩溃。我倾向于不担心在整数参数上调用 IsNumeric()
,但这可能是值得的(尝试传递废话,看看会发生什么)。
您将两种不同类型的消毒混为一谈。 SQL 参数化可防止“Bobby Tables”漏洞 - 一段恶意写入的数据会诱使 SQL 结束当前查询并执行攻击者选择的单独查询。
即使使用 SQL 参数,攻击者也可以通过(例如)在字段中输入“alert('Gotcha!')”来尝试 运行 您页面上的脚本。在 HTML 页面上显示字段数据,然后写出并执行该脚本。为防止 您使用 Server.HTMLencode
在 Classic 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 字符串被篡改的可能性,因为值是在执行时提供的。
其他是正确的,您无需担心参数的内容。您确实需要担心字符串的长度。我会将 Left(card_pwd, 255)
传递给 CreateParameter()
以避免异常导致脚本崩溃。我倾向于不担心在整数参数上调用 IsNumeric()
,但这可能是值得的(尝试传递废话,看看会发生什么)。
您将两种不同类型的消毒混为一谈。 SQL 参数化可防止“Bobby Tables”漏洞 - 一段恶意写入的数据会诱使 SQL 结束当前查询并执行攻击者选择的单独查询。
即使使用 SQL 参数,攻击者也可以通过(例如)在字段中输入“alert('Gotcha!')”来尝试 运行 您页面上的脚本。在 HTML 页面上显示字段数据,然后写出并执行该脚本。为防止 您使用 Server.HTMLencode