【问题标题】:Security considerations for intranet developer making public facing website?Intranet 开发人员制作面向公众的网站的安全注意事项?
【发布时间】:2009-05-06 21:53:18
【问题描述】:

我在编写内部 Intranet 应用程序方面拥有丰富的经验,但在编写面向公众的 Web 应用程序方面却很少,因为这可能会有一定比例的人会尝试并且是恶意的。

该应用是用 MVC.net、JQuery 和 Subsonic 编写的。

我可以采取哪些步骤来规划我的应用程序,以使其合理规划?

我已经做了一些事情:

  • 服务器端和客户端的表单验证
  • 强制密码复杂性
  • 签入当前用户可以执行该操作的控制器操作。

对于查看我的表单的 html 源代码并查看表单发布的内容并使用它手动创建具有不同值的表单帖子来执行他们不应该执行的操作的人,我一直非常偏执。这种妄想症是否有根据?我需要对使用 HttpVerb GET 和 POST 或仅 GET 的操作执行此操作吗?

我是否需要担心 ORM 的 SQL 注入?

【问题讨论】:

    标签: jquery asp.net-mvc security subsonic


    【解决方案1】:

    检查所有控制器操作的授权,包括 GET 和 POST。不是为会话授权,而是为每个请求再次授权。

    服务器验证是必须的。还要在数据库级别强制执行一定数量的数据完整性。一旦发现一些异常情况就失败。不要试图恢复和处理所有可能的情况来取悦用户。

    不要依赖用户标识,例如存储在 cookie 中的用户名。它可以更换。添加更多和独特的东西。 Cookie 也可能被窃取并转移到另一台 PC。考虑检查 IP 地址的选项(例如),以确保您没有被欺骗。

    限制单位时间的用户操作量。不允许在一分钟内提交 100 次。

    必须对所有用户输入进行清理。是的,担心 SQL 注入。

    不要以纯文本形式存储密码。哈希它们。如果有人闯入您的系统,他们可以通过假设用户具有相同的密码来访问他的电子邮件帐户、银行系统等来滥用密码。

    另一个好主意是不要使用公开昵称、电子邮件或其他公开称为登录名的名称。允许用户使用登录名来执行登录操作,并允许用户使用不同的名称在网站上公开代表他们。

    其实,看看这个帖子。它对这类知识进行了很好的总结。

    What should a developer know before building a public web site?

    【讨论】:

    • HttpContext.User.Identity.Name 看 cookie 吗?
    • 不能说。我不使用 ASP.NET 成员资格,而是使用我自己的身份验证/授权实现。如果可以选择让用户在会话之间保持登录状态,那么可能有一个 cookie 在起作用。
    【解决方案2】:

    构建面向公众的网站时的偏执狂是你的朋友。

    您的 cookie 是否已加密?通过自定义 HttpModule 很容易完成。这是在普通 SSL 之上的。

    是的,您需要担心 sql 注入。并非所有 ORM 都是平等的。我们最近发现 LINQ 在某些条件下存在 sql 注入问题。不要相信任何为您编写查询的东西。

    如果这涉及敏感信息,请添加代码以防止重放攻击。基本上,假设离开服务器的所有内容都将被某人捕获。

    【讨论】:

      【解决方案3】:
      • 在几次失败后帐户锁定(30 分钟)以防止暴力破解。
      • 考虑将 SSL 作为注册和登录页面的一个选项。
      • 用户类中的 IsInRole 函数是一种管理用户操作安全性的简单方法。
      • 为任何“记住我”功能使用令牌。确保此令牌的生成是加密安全的。
      • 仅使用参数化查询,以防止注入。
      • 加密 cookie。
      • Microsoft Anti-XSS
      • 偏执。

      有很多考虑因素。与往常一样,这将是一项正在进行的工作。

      【讨论】:

        【解决方案4】:
        • 所有用户输入都将被视为会破坏您的服务器 (XSS)
        • 来自/来自数据库的所有信息都是魔鬼,必须关闭(SQL 注入)
        • 如果你不小心,饼干怪物会抓住你。
        • 就像关闭了 Javascript 一样进行编程,但为打开它的用户提供功能

        【讨论】:

        • 我只支持使用 JS 的用户,来自 w3c 的统计数据表明 96% 的人都使用它。 (但我确实有服务器端验证来保护)。
        【解决方案5】:

        如需详尽的 Web 应用程序漏洞目录、最重要的解决方案以及有助于编写更安全代码的开发实践,请查看 OWASPCLASP.

        【讨论】:

          【解决方案6】:
          • 清理客户端发送的任何输入 你。 POST/GET 数据可能是 最容易伪造,但绝对是 不是全部。

          • 不要只依赖 JavaScript 任何安全措施,因为这可以 同样容易被绕过。

          • 确保您有安全策略 用于密码恢复(例如不 只是一个“秘密问题”)

          • 具有某种蛮力保护,例如验证码

          【讨论】:

            【解决方案7】:

            您对安全的重视程度如何?

            出于安全考虑,有一个 RFC 标准。

            http://www.faqs.org/rfcs/rfc3552.html

            通读一遍(大约 42 页)。它包含大多数安全注意事项。创建新的 RFC 时,您将使用此文档来指导您考虑。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2012-01-03
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2020-11-23
              相关资源
              最近更新 更多