为什么我的 html 调试 msgs/comments (Response.Write) 中只有一个没有被写入 "View Source"?
Why are all but one of my html debug msgs/comments (Response.Write) not being written to the "View Source"?
我知道这段代码正在被攻击,因为正在完成插入:
Response.Write("<!-- Made it just before INSERT INTO CustomerCategoryLog -->")
Dim query As String = String.Empty
query &= "INSERT INTO CustomerCategoryLog (MemberNo, Unit, Custno, "
query &= "Category, Subcategory, BeginDate, "
query &= "EndDate, ChangedBy, ChangedOn) "
query &= "VALUES (@MemberNo, @Unit, @Custno, @Category, @Subcategory, @BeginDate, @EndDate, @ChangedBy, @ChangedOn)"
Using conn As New SqlConnection("SERVER=PROSQL05;DATABASE=cpsdata;UID=sa;PWD=sqlsql")
Using comm As New SqlCommand()
Response.Write("<!-- Made it into the using comm As New SqlCommand() block -->")
With comm
.Connection = conn
.CommandType = CommandType.Text
.CommandText = query
.Parameters.Add("@MemberNo", SqlDbType.NVarChar).Value = MemberNo
.Parameters.Add("@Unit", SqlDbType.NVarChar).Value = Unit
.Parameters.Add("@Custno", SqlDbType.NVarChar).Value = CustNo
.Parameters.Add("@Category", SqlDbType.NVarChar).Value = Category
.Parameters.Add("@Subcategory", SqlDbType.NVarChar).Value = Subcategory
.Parameters.Add("@BeginDate", SqlDbType.DateTime).Value = Date.Now()
.Parameters.Add("@EndDate", SqlDbType.DateTime).Value = Date.Now().AddDays(365)
.Parameters.Add("@ChangedBy", SqlDbType.NVarChar).Value = Environment.UserName
.Parameters.Add("@ChangedOn", SqlDbType.DateTime).Value = Date.Now()
End With
Try
Response.Write("<!-- Made it into the try block -->")
conn.Open()
comm.ExecuteNonQuery()
Catch '(ex as SqlException)
Response.Write("<!-- Made it into the catch block -->")
End Try
End Using 'comm
End Using 'conn
然而 Response.Write() 中的 none 已呈现到页面,如 "View Source" 所示。
为什么不呢?在前面的地方,comment/debug 消息 是 被写入,使用相同的语法:
Response.Write("<!-- IsNewBusiness after NOT adoRS.EOF check = " & CStr(IsNewBusiness) & " -->")
为什么对 Response.Write() 的后续调用什么都不做?
更新
在 Web.Config 中 是 一个 "system.diagnostics" 部分,内容如下:
<system.diagnostics>
<sources>
<!-- This section defines the logging configuration for My.Application.Log -->
<source name="DefaultSource" switchName="DefaultSwitch">
<listeners>
<add name="FileLog" />
<!-- Uncomment the below section to write to the Application Event Log -->
<add name="EventLog" />
</listeners>
</source>
</sources>
<switches>
<add name="DefaultSwitch" value="Information" />
</switches>
<sharedListeners>
<add name="FileLog" type="Microsoft.VisualBasic.Logging.FileLogTraceListener, Microsoft.VisualBasic, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL" initializeData="FileLogWriter" />
<!-- Uncomment the below section and replace APPLICATION_NAME with the name of your application to write to the Application Event Log -->
<add name="EventLog" type="System.Diagnostics.EventLogTraceListener" initializeData="eServices" />
</sharedListeners>
</system.diagnostics>
如您所见,有一个 "sharedListeners" 小节,但据我所知,它并没有清除它们...
更新 2
这是我在 "HttpContext.ApplicationInstance.Context." 到 "Trace.Write(" 之前得到的:
Server Error in '/EMS/customerreportingnet' Application.
--------------------------------------------------------------------------------
Compilation Error
Description: An error occurred during the compilation of a resource required to service this request. Please review the following specific error details and modify your source code appropriately.
Compiler Error Message: BC30469: Reference to a non-shared member requires an object reference.
Source Error:
Line 184: ' Put the Category Table insert here, too...
Line 185: ' Beginning of SQL Insert code added 3/6/2017 - if not reached, move it above the "END IF"
Line 186: HttpContext.ApplicationInstance.Context.Trace.Write("<!-- Made it just before INSERT INTO CustomerCategoryLog -->")
Line 187: Dim query As String = String.Empty
Line 188: query &= "INSERT INTO CustomerCategoryLog (MemberNo, Unit, Custno, "
Source File: C:\EnhancedMonthlySalesReporting\customerreportingnet\customerreportingnet\pages\custmaint_entry.aspx Line: 186
UDPATE 3
一个(对我来说非常)奇怪的事情是,当我得到 trace.axd 时,它没有列出有问题的文件——我插入了对 Trace.axd 的调用的那个文件:
但我在那个页面上(虽然它没有显示在 URL 中,它仍然是 http:///localhost/EMS/customerreportingnet),当我将“/trace.axd”附加到URL 并按回车键。
为什么文件没有出现在列表中?
如果我 "View Source" 从那个页面,我确实看到它的一些输出,比如 ""
所以 custmaint_entry.aspx 正在被访问 - 这也被 "View Source" 窗格中的 URL 看到:
如果 Response.Write
调用以这样一种方式编写,即它们最终出现在浏览器显示的 html 负载中,这取决于您将这些调用置于 ASP.NET 生命周期中的哪个位置.
从表面上看,您正在尝试 debug/trace 复杂网页中的代码流。我个人会依赖 .Net Framework 提供的 Tracing facilities 和 ASP.NET.
在您的网络应用程序的根目录中,将 web.config 编辑为 include/update 带有 trace
标签的 system.web 标签。
<config>
<!-- lots of stuff -->
<system.web>
<trace enabled="true"
pageOutput="false"
requestLimit="1337"
localOnly="false"/>
</system.web>
<!-- lots of stuff -->
</config>
为了完整性,请检查您是否有 system.diagnostics
标签,并确认 <sharedListeners>
标签中没有 <clear/>
元素。
在您的其中一个页面上(比如 /about.aspx)添加代码(内联或在代码后面):
System.Web.HttpContext.Current.Trace.Write("foo", "bar")
现在保存并 运行 您的 webapp 并导航到 /about.aspx 并确保您执行上述 Trace.Write
行。
访问/trace.axd。您将获得已提供页面的概览。找到您的 /about.aspx 行,然后单击右侧的 View Details
link。这会将您带到应该包含您的跟踪消息的详细信息页面。
在/trace.axd的起始页,您也可以点击左上角的link清除痕迹。
使用上面的 Trace 消息写入 Response 流的好处是,这些 Trace 调用可以留在生产代码中,然后随意启用。通过网络向浏览器发送过多数据可能会减慢应用程序的响应时间。
我知道这段代码正在被攻击,因为正在完成插入:
Response.Write("<!-- Made it just before INSERT INTO CustomerCategoryLog -->")
Dim query As String = String.Empty
query &= "INSERT INTO CustomerCategoryLog (MemberNo, Unit, Custno, "
query &= "Category, Subcategory, BeginDate, "
query &= "EndDate, ChangedBy, ChangedOn) "
query &= "VALUES (@MemberNo, @Unit, @Custno, @Category, @Subcategory, @BeginDate, @EndDate, @ChangedBy, @ChangedOn)"
Using conn As New SqlConnection("SERVER=PROSQL05;DATABASE=cpsdata;UID=sa;PWD=sqlsql")
Using comm As New SqlCommand()
Response.Write("<!-- Made it into the using comm As New SqlCommand() block -->")
With comm
.Connection = conn
.CommandType = CommandType.Text
.CommandText = query
.Parameters.Add("@MemberNo", SqlDbType.NVarChar).Value = MemberNo
.Parameters.Add("@Unit", SqlDbType.NVarChar).Value = Unit
.Parameters.Add("@Custno", SqlDbType.NVarChar).Value = CustNo
.Parameters.Add("@Category", SqlDbType.NVarChar).Value = Category
.Parameters.Add("@Subcategory", SqlDbType.NVarChar).Value = Subcategory
.Parameters.Add("@BeginDate", SqlDbType.DateTime).Value = Date.Now()
.Parameters.Add("@EndDate", SqlDbType.DateTime).Value = Date.Now().AddDays(365)
.Parameters.Add("@ChangedBy", SqlDbType.NVarChar).Value = Environment.UserName
.Parameters.Add("@ChangedOn", SqlDbType.DateTime).Value = Date.Now()
End With
Try
Response.Write("<!-- Made it into the try block -->")
conn.Open()
comm.ExecuteNonQuery()
Catch '(ex as SqlException)
Response.Write("<!-- Made it into the catch block -->")
End Try
End Using 'comm
End Using 'conn
然而 Response.Write() 中的 none 已呈现到页面,如 "View Source" 所示。
为什么不呢?在前面的地方,comment/debug 消息 是 被写入,使用相同的语法:
Response.Write("<!-- IsNewBusiness after NOT adoRS.EOF check = " & CStr(IsNewBusiness) & " -->")
为什么对 Response.Write() 的后续调用什么都不做?
更新
在 Web.Config 中 是 一个 "system.diagnostics" 部分,内容如下:
<system.diagnostics>
<sources>
<!-- This section defines the logging configuration for My.Application.Log -->
<source name="DefaultSource" switchName="DefaultSwitch">
<listeners>
<add name="FileLog" />
<!-- Uncomment the below section to write to the Application Event Log -->
<add name="EventLog" />
</listeners>
</source>
</sources>
<switches>
<add name="DefaultSwitch" value="Information" />
</switches>
<sharedListeners>
<add name="FileLog" type="Microsoft.VisualBasic.Logging.FileLogTraceListener, Microsoft.VisualBasic, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL" initializeData="FileLogWriter" />
<!-- Uncomment the below section and replace APPLICATION_NAME with the name of your application to write to the Application Event Log -->
<add name="EventLog" type="System.Diagnostics.EventLogTraceListener" initializeData="eServices" />
</sharedListeners>
</system.diagnostics>
如您所见,有一个 "sharedListeners" 小节,但据我所知,它并没有清除它们...
更新 2
这是我在 "HttpContext.ApplicationInstance.Context." 到 "Trace.Write(" 之前得到的:
Server Error in '/EMS/customerreportingnet' Application.
--------------------------------------------------------------------------------
Compilation Error
Description: An error occurred during the compilation of a resource required to service this request. Please review the following specific error details and modify your source code appropriately.
Compiler Error Message: BC30469: Reference to a non-shared member requires an object reference.
Source Error:
Line 184: ' Put the Category Table insert here, too...
Line 185: ' Beginning of SQL Insert code added 3/6/2017 - if not reached, move it above the "END IF"
Line 186: HttpContext.ApplicationInstance.Context.Trace.Write("<!-- Made it just before INSERT INTO CustomerCategoryLog -->")
Line 187: Dim query As String = String.Empty
Line 188: query &= "INSERT INTO CustomerCategoryLog (MemberNo, Unit, Custno, "
Source File: C:\EnhancedMonthlySalesReporting\customerreportingnet\customerreportingnet\pages\custmaint_entry.aspx Line: 186
UDPATE 3
一个(对我来说非常)奇怪的事情是,当我得到 trace.axd 时,它没有列出有问题的文件——我插入了对 Trace.axd 的调用的那个文件:
但我在那个页面上(虽然它没有显示在 URL 中,它仍然是 http:///localhost/EMS/customerreportingnet),当我将“/trace.axd”附加到URL 并按回车键。
为什么文件没有出现在列表中?
如果我 "View Source" 从那个页面,我确实看到它的一些输出,比如 ""
所以 custmaint_entry.aspx 正在被访问 - 这也被 "View Source" 窗格中的 URL 看到:
如果 Response.Write
调用以这样一种方式编写,即它们最终出现在浏览器显示的 html 负载中,这取决于您将这些调用置于 ASP.NET 生命周期中的哪个位置.
从表面上看,您正在尝试 debug/trace 复杂网页中的代码流。我个人会依赖 .Net Framework 提供的 Tracing facilities 和 ASP.NET.
在您的网络应用程序的根目录中,将 web.config 编辑为 include/update 带有 trace
标签的 system.web 标签。
<config>
<!-- lots of stuff -->
<system.web>
<trace enabled="true"
pageOutput="false"
requestLimit="1337"
localOnly="false"/>
</system.web>
<!-- lots of stuff -->
</config>
为了完整性,请检查您是否有 system.diagnostics
标签,并确认 <sharedListeners>
标签中没有 <clear/>
元素。
在您的其中一个页面上(比如 /about.aspx)添加代码(内联或在代码后面):
System.Web.HttpContext.Current.Trace.Write("foo", "bar")
现在保存并 运行 您的 webapp 并导航到 /about.aspx 并确保您执行上述 Trace.Write
行。
访问/trace.axd。您将获得已提供页面的概览。找到您的 /about.aspx 行,然后单击右侧的 View Details
link。这会将您带到应该包含您的跟踪消息的详细信息页面。
在/trace.axd的起始页,您也可以点击左上角的link清除痕迹。
使用上面的 Trace 消息写入 Response 流的好处是,这些 Trace 调用可以留在生产代码中,然后随意启用。通过网络向浏览器发送过多数据可能会减慢应用程序的响应时间。