【问题标题】:Which ASP.NET commands can lead to insecure code?哪些 ASP.NET 命令会导致代码不安全?
【发布时间】:2009-07-19 03:01:07
【问题描述】:

就个人而言,我尝试编写安全的 ASP.NET 代码。然而,我对自己编写的代码变得非常偏执,因为我曾经为注册商工作(高欺诈目标)。有没有我应该仔细检查的 ASP.NET 函数(除了 SQL 访问 - 我知道不做动态 SQL)。

【问题讨论】:

    标签: asp.net sql security


    【解决方案1】:

    这是一篇出色的 MSDN 文章:Security Practices: ASP.NET 2.0 Security Practices at a Glance

    摘录:

    如何防止跨站脚本

    验证输入并编码输出。 通过验证输入来约束输入 类型、长度、格式和范围。采用 HttpUtility.HtmlEncode 方法 如果包含输入,则编码输出 来自用户,例如来自表单的输入 字段、查询字符串和 cookie 或 来自其他来源,例如数据库。 永远不要只是将输入回显给用户 无需验证和/或编码 数据。下面的例子展示了如何 对表单字段进行编码。

    Response.Write(HttpUtility.HtmlEncode(Request.Form["name"]));
    

    如果您返回的 URL 字符串包含 输入到客户端,使用 HttpUtility.UrlEncode 方法进行编码 这些 URL 字符串,如此处所示。

    Response.Write(HttpUtility.UrlEncode(urlString));
    

    如果您有需要接受的页面 一系列 HTML 元素,例如 通过某种富文本输入 字段,您必须禁用 ASP.NET 请求验证页面。

    打开自定义错误以保持错误的私密性

    <customErrors mode="On" defaultRedirect="YourErrorPage.htm" />
    

    【讨论】:

    • 谢谢米奇!我很欣赏你的回应,但是......你给出的回应让我相信这是针对非转义 SQL 或非数据库驱动代码的对策。原因是它都是基于用户输入的存储。此外,根据我的经验,URLEncoding 事物倾向于“过度编码”,因为它必须订阅 URL 编码规则(非常严格)。此外,对于 ASP.NET,我尽量避免使用任何 Response.Writes。我发现 ASP.NET code-infront 控件为我的 HTML 提供了更好的结构意识。不过我会给你+1,因为你在技术上仍然有效:)
    【解决方案2】:

    永远不要相信用户输入。永远不要假设客户端验证会阻止错误的输入数据。始终确保 web.config 中的 ValidateRequest="true" 和 EnableEventValidation="true" :

    请参阅 Request ValidationASP.NET Security Tutorials

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-14
      • 2012-12-18
      • 2021-02-11
      • 1970-01-01
      • 2012-11-06
      • 1970-01-01
      相关资源
      最近更新 更多