ASP SqlServer 参数,防注入攻击

本文介绍了一个使用VBScript进行数据库操作的例子,包括建立连接、执行查询、处理查询结果及使用参数化查询防止SQL注入等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

<%@ LANGUAGE="VBscript" %>
<%Response.Buffer = True
On Error Resume Next
%>
-----------------------------
<%

'ole db连接
set cnn1 = Server.CreateObject("ADODB.Connection")
'连接串需要注意sqlserver的实例名,是否是默认,非默认必须要写出来
cnn1.Open "Driver={SQL Server};Server=.;Database=SportsDB;UID=wgscd;PWD=111111;"
'或者 cnn1.Open "provider=sqloledb;data source=(local);uid=wgscd;pwd=111111;database=SportsDB"

sql = "select * from Customers"
set rs= Server.CreateObject("ADODB.RecordSet")

rs.Open sql,cnn1 ,1,1
'获得连接信息与查询结果行数
Response.write("连接1:" & cnn1.ConnectionString & "
行数:" & rs.recordcount & "

")

'循环结果输出
do While not rs.eof
'Response.write(rs(0) & "," & rs(1) & "
")
Response.write rs("id") & "
id:" & rs.Fields.Item("id").Value & "
"
rs.MoveNext
Loop

rs.close()
cnn1.close()
set cnn1 = nothing

'------------------------------------------------------------
‘带参数查询’
dim License
dim Product
License=2
Product=22

Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open ("Driver={SQL Server};Server=.;Database=SportsTek;UID=wgscd;PWD=111111;")
Dim Cust
Set Cust = Server.CreateObject ("ADODB.Recordset")
Cust.CursorLocation = 3

sql = "SELECT * FROM Customers WHERE id=? AND cust_name=?"
'Cust.Open sql, Conn, 1,3
set cmd = Server.CreateObject("ADODB.Command")
cmd.ActiveConnection = Conn
cmd.CommandText = sql
'-------------------------------------------------------------------------------
'cmd.Parameters.Append cmd.CreateParameter("",200, 1, 100,License)'参数为空也行
'cmd.Parameters.Append cmd.CreateParameter("",200, 1, 100,Product)'参数为空也行
'-------------------------------------------------------------------------------
cmd.Parameters.Append cmd.CreateParameter("@id",200, 1, 100,License)
cmd.Parameters.Append cmd.CreateParameter("@cust_name",200, 1, 100,Product)
'-----------------------------------------------
'not work(下面这种模式不正确)
'cmd.Parameters("@id").value = License
'cmd.Parameters("@cust_name").value = License
'-----------------------------------------------

Cust.Open cmd
'Sql injection add----------

IF Cust.RecordCount > 0 THEN
Response.write "
count:" & Cust.RecordCount & "
cust_name:" & Cust("cust_name")
else
Response.write "no
"
end if
Cust.Close
Conn.close
set Conn = nothing
'------------------------------------------------------------------
If Err.Number <> 0 Then
'Response.Clear
response.write"发生错误:"

%>

错误 Number: <%= Err.Number %>

错误信息: <%= Err.Description %>

出错文件: <%= Err.Source %>

出错行: <%= Err.Line %>

<%End If%>



Set parameter = command.CreateParameter (Name, Type, Direction, Size, Value)

返回值
返回 Parameter 对象。
参数
Name   可选,字符串,代表 Parameter 对象名称。
Type   可选,长整型值,指定 Parameter 对象数据类型。关于有效设置请参见 Type 属性。
Direction   可选,长整型值,指定 Parameter 对象类型。关于有效设置请参见 Direction 属性。
Size   可选,长整型值,指定参数值最大长度(以字符或字节数为单位)。
Value   可选,变体型,指定 Parameter 对象的值。
说明
使用 CreateParameter 方法可用指定的名称、类型、方向、大小和值创建新的 Parameter 对象。在参数中传送的所有值都将写入相应的 Parameter 属性。
该方法无法自动将 Parameter 对象追加到 Command 对象的 Parameter 集合,这样就可以设置附加属性。如果将 Parameter 对象追加到集合,则 ADO 将使该附加属性的值生效。
如果在 Type 参数中指定可变长度的数据类型,那么在将它追加到 Parameters 集合之前必须传送 Size 参数或者设置 Parameter 对象的 Size 属性
================================================================================
参数值的类型的意义如下:
Type名称 整数值 功能
adDBTimeStamp 135 日期时间数据类型
adDecimal 14 十进制整数值
adDouble 5 双精度小数值
adError 10 系统错误信息
AdGUID 72 全域性唯一识别字(Globally unique identifier)
adDispath 9 COM/OLE自动对象(Automation Object)
adInteger 3 4字节有符号整数
adIUnknown 13 COM/OLE对象
adLongVarBinary 205 大型2字节值
adLongVarChar 201 大型字符串值
adLongVarWChar 203 大型未编码字符串
adNumeric 131 十进制整数值
adSingle 4 单精度浮点小数
adSmallInt 2 2字节有符号整数
adTinyInt 16 1字节有符号整数
adUnsignedBigInt 21 8字节无符号整数
adUnsignedInt 19 4字节无符号整数
adUnsignedSmallInt 18 2字节无符号整数
adUnsignedTinyInt 17 1字节无符号整数
adUserDefined 132 用户自定义数据类型
adVariant 12 OLE对象
adVarBinary 204 双字节字符变量值
adVarChar 200 字符变量值
advarchar 202 未编码字符串变量值
adWchar 130 未编码字符串
方向值的意义如下:
Direction名称 整数值 功能  
adParamInput 1 允许数据输入至该参数当中
adParamOutput 2 允许数据输出至该参数当中
adParamInputOutput 3 允许数据输入、输出至该参数当中
adparamReturnValue 4 允许从一子程序中返回数据至该参数当中


转载于:https://www.cnblogs.com/wgscd/articles/7509964.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值