Sea*_*ynn 1 javascript sql-server-2005 asp-classic
我正在使用Microsoft SQL Server 2005存储过程在HTML表中发布记录.在HTML表格中,我有以下字段的行:条目号,开放日期,说明和所有者.
有时,db表中的owner字段将为NULL.发生这种情况时,我有ASP响应.在与所有者对应的HTML表行中写入"N/A".但是,我想避免这种情况,因为它似乎是多余的.相反,如果db中的owner字段为NULL,我希望有一种方法可以完全消除该表行.我该怎么做呢?我正在使用Javascript,经典ASP和SQL Server 2005.我的代码如下.注意 - 我完全是新手.谢谢.
'Declare Variables
Dim CN, RS, vOutputType, vSQL, vNumber, vOwner
'Connection from includes file
Set CN = GetDataConnection
vOutputType = Request.QueryString("ot")
If Request.QueryString("txtNumber") <> "" Then
vNumber = Rtrim(Request.QueryString("txtNumber"))
End If
If Request.QueryString("cboOwner") <> "" Then
vOwner = Rtrim(Request.QueryString("cboOwner"))
End If
If vNumber <> "" Or vOwner <> "" Then
vSQL = "spReport "
vSQL = vSQL & "@vNumber = '" & vNumber & "', "
vSQL = vSQL & "@vOwner = '" & vOwner & "'"
Set RS = CN.Execute(vSQL)
If IsObject(RS) Then
If Not RS.EOF Then%>
<table class="WebApps">
<tr>
<td width="5%"><h3>Entry #</h3></td>
<td width="5%"><h3>Open Date</h3></td>
<td width="5%"><h3>Description</h3></td>
<td width="5%"><h3>Owner</h3></td>
</tr>
<%RS.MoveFirst
Do While Not RS.EOF
%>
<tr>
<td><p><%= RS("ID")%></p></td>
<td><p><%= RS("OpenDate")%></p></td>
<td><p><%= RS("Description")%></p></td>
<td><p><%If (RS("OwnerName")) <> "" Then Response.Write(RS("OwnerName")) Else Response.Write("N/A")%></p></td>
</tr>
<%RS.MoveNext
Loop%>
</table>
<%End If
End If
'Close objects
Set RS = NOTHING
CN.Close
Set CN = Nothing
Run Code Online (Sandbox Code Playgroud)
既然你是一个"全新手",这里有一些建议.
SQL注入攻击
你的代码: -
vSQL = "spReport "
vSQL = vSQL & "@vNumber = '" & vNumber & "', "
vSQL = vSQL & "@vOwner = '" & vOwner & "'"
Set RS = CN.Execute(vSQL)
Run Code Online (Sandbox Code Playgroud)
不要这样做.有人可以创建一个查询字符串来在您的服务器上执行任意SQL: -
?txtNumber=30&cboOwner='; arbitary SQL code here ; --
Run Code Online (Sandbox Code Playgroud)
您应始终使用ADODB.Command对象来执行需要从客户端检索的参数值的SQL.网页搜索"SQL注入ASP"
NULL的含义
你似乎对NULL的含义有点困惑."db表中的owner字段将为NULL",但您的代码正在测试<>"".Null与空字符串不同.实际为NULL的字段不等于"".
使用Server.HTMLEncode
你的代码: -
<td><p><%= RS("Description")%></p></td>
Run Code Online (Sandbox Code Playgroud)
如果Description字段包含一个<
或一个&
字符会发生什么?更糟糕的是,如果描述字段中的数据从Web客户端上的数据条目开始,它可能包含Javascript注入尝试.始终对发送到客户端的字符串数据使用Server.HTMLEncode: -
<td><p><%= Server.HTMLEncode(RS("Description"))%></p></td>
Run Code Online (Sandbox Code Playgroud)
你的实际问题
不要试图在ASP页面中使用VBScript来完成SQL应该做的工作.使用WHERE子句修改SQL: -
WHERE Owner IS NOT NULL
Run Code Online (Sandbox Code Playgroud)
或者,如果您不确定所有者是否为NULL或空字符串: -
WHERE Owner IS NOT NULL AND Owner <> ""
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1136 次 |
最近记录: |