【问题标题】:ASP classic code keeps reloadingASP 经典代码不断重新加载
【发布时间】:2014-05-12 04:49:55
【问题描述】:

我有一个 ASP.NET 网站,其中包含几个运行经典 ASP 代码的 aspx 页面。下面的查询是用经典的 asp 代码编写的,它使用 App_Code 文件 (dbConn) 来运行查询。

<%
SQL1 = "INSERT INTO table (field1, field2, field3) VALUES ('" & value1 & "', '" & value2 &    "', '" & value3 & "')"
dbConn.ExecuteCommand(SQL1)
%>

我面临的问题是具有查询的文件,假设它为“query.aspx”,即使页面“query.aspx”被调用,也会不断调用查询并用相同的条目填充数据库无限次在另一个文件中只有一次

<!-- #include file="inc/query.aspx" -->

我的问题是,为什么页面会一遍又一遍地执行查询,即使它在整个项目中只包含一次?页面“query.aspx”是否被多次调用,即使它没有被多次包含?

【问题讨论】:

  • 带有 *.aspx 扩展名且使用旧的 bee sting 样式代码的页面仍然是 vb.net/asp.net,而不是经典的 asp。
  • 另外,该代码示例看起来像是等待发生的 sql 注入黑客攻击
  • 不是sql注入。顺便说一句,你删除了 asp.net 标签。
  • 我不知道:将数据放入 sql 查询中的字符串连接对我来说确实像是一个 sql 注入漏洞。去参数化查询或回家。

标签: asp.net


【解决方案1】:

这里首先要了解的是,*.aspx 页面是 ASP.Net,而不是经典的 ASP。

有了这些信息,我们还需要了解一些关于how ASP.Net handles pages 的事情。如果您使用 Web 表单,ASP.Net 会做很多工作来隐藏 HTTP 请求/Repsonse 模型。相反,您会看到一个试图使网页看起来像 Windows 窗体的模型:您将获得一个窗体实例,您可以从中添加和删除控件。

除非那不太对。你并没有真正得到一个表单实例。你只会得到一个表单type。 ASP.Net 并没有完全隐藏请求/响应模型。对您页面的每个请求都使用与上一个请求不同的表单实例,即使在相同的用户和会话中也是如此。您处理的每个控制事件都会产生一个新请求,每次发生这种情况时,ASP.Net 运行时都必须从头开始重建您的整个页面实例。

这意味着一个用户查看一个 ASP.Net 页面将导致该页面的代码在他们与页面交互时运行多次。如果您在该页面上有 &lt;!-- #include 指令,则该指令将针对每个控制事件重新执行。

要解决此问题,首先将 Query.aspx 文件替换为支持将查询参数数据与 sql 命令字符串分开发送的数据库类。然后将这样的代码放入您的 *.aspx 页面中以使用该新类:

Sub Page_Load
    If Not IsPostBack
        ' Call the database code from here
    End If
End Sub

【讨论】:

  • 非常感谢您提供详细描述的答案。我在 cmets 中也学到了一些额外的东西。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-13
相关资源
最近更新 更多