【问题标题】:Why are ASP.NET more secure than ASP Classic?为什么 ASP.NET 比 ASP Classic 更安全?
【发布时间】:2023-03-28 22:10:01
【问题描述】:

我读过几个地方都说 ASP.NET 比 ASP Classic 更安全。但从未见过任何关于原因的实际论据。

以标准登录系统为例。 用户通过表单向服务器发送用户名和密码。这在两种语言中都是以相同的方式完成的。在这两种语言中,其余的都是在服务器上完成的。 为什么在这里选择 ASP.NET 而不是 ASP Classic?

【问题讨论】:

  • 你在哪里读到这个?在 .NET 中,开发人员无意中为恶意攻击者提供访问权限的方法至少与 Classic 中一样多。
  • 我很想提供我阅读它的链接,但我真的不记得而且现在似乎找不到它。自从我大约 9 到 12 个月前阅读它以来,它一直在唠叨我,这就是我问的原因。 :) 如果它不是真的(如你所说?)那么问题的答案将类似于“它不是 [...]”

标签: asp.net security asp-classic


【解决方案1】:

正如 ScottRFrost 所提到的,Request Validation 默认防止 XSS。就个人而言,我更喜欢关闭它并开发一个应用程序来使用输出清理(例如,HTML 编码输出到网页,或正确编码和转义 JavaScript 中使用的输出)。这种方法不会限制用户输入,因此不会像请求验证那样限制应用程序功能。例如它将允许将 HTML 输入到将显示在网页上而不是由浏览器解释的字段中(想象一个不允许发布 HTML 的 HTML 开发人员论坛)。如果您在 ASP.NET 中使用此方法,您将使用与标准 ASP 开发非常相似的方法,以将变量输出到页面。

回答您的问题,在身份验证期间(验证用户名/密码组合),经典 ASP 和 ASP.NET 之间没有太大区别。 ASP.NET 提供了一些可以拖放到页面中的用户控件,还提供了Membership Provider 模型,但本质上你必须实现这两种方式的逻辑。

ASP.NET 还包含作为标准的授权组件,因此可以通过 web.config 文件中的设置来限制对整个应用程序或某些 URL 路径的访问。这可以防止开发人员忘记在每页的基础上进行授权检查。不过,任何更细粒度的访问检查仍需要在 ASP.NET 中手动处理。

ASP.NET 还提供无法通过 Web 服务器读取的专用文件夹,例如 /App_Data。这为存储不应通过 HTTP 直接读取的应用程序相关文件提供了一个方便的位置。您可以在 Classic ASP 中手动执行此操作,但您需要将此目录存储在 Web 根目录之外,或者您需要设置本地文件夹权限,以便 IIS 用户无法读取这些文件。

总而言之,我不会说 ASP.NET 本质上比经典 ASP 更安全,除了新手开发人员不太可能在 ASP.NET 中创建易受 XSS 攻击的网站。

【讨论】:

    【解决方案2】:

    ASP.NET 默认包含Request Validation 等功能,可限制一些常见的脚本攻击。您可以在经典 ASP 中自己执行此操作,但在 .NET 中这是默认设置。

    【讨论】:

      【解决方案3】:

      可能存在安全问题。但我担心一件事。它是关于 SQL 注入的。 Asp.net 提供了参数化查询和 HTML 编码解码技术的设施。更多信息请点击链接ASP.net security

      【讨论】:

      • 这不是答案。 ASP Classic 中使用的 ADODB 还为开发人员提供了一种使用参数化查询的方法。同样,.NET 中也没有任何东西可以阻止开发人员在注入漏洞中进行编码。
      • 正如@AnthonyWJones 所说,您可以使用参数化查询来阻止注入攻击。如果查询 ID,您还可以使用 RegEdit 表达式过滤掉所有非数字字符。如果查询字符串,您可以创建一个函数,用正确的 ASCII 字符替换易受攻击的字符。
      猜你喜欢
      • 2020-04-02
      • 2012-09-02
      • 2021-07-05
      • 2021-07-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多