如何处理旧网站的安全问题?

时间:2011-02-11 17:01:21

标签: c# asp.net security iis

我最近登陆了充满旧学校技巧的旧网页应用程序

  1. GET参数:网址参数中的用户信息
  2. 会话信息
  3. 用于存储信息的隐藏元素
  4. HTML / JS / CSS转储在页面中。没有适当的编码。等
  5. Window.open显示弹出窗口。
  6. XSS问题等。
  7. 连接的SQL字符串,适用于盲目的SQL攻击。
  8. 还有更多......

    使事情有效。看起来应用程序在过去的5到7年中已经过时了(ASP.NET 1.1),看起来应用程序代码无法跟上更好的安全实践。

    值得庆幸的是,在过去的浏览器和安全测试工具中,它看起来非常好。帮助人/客户不时报告如此多的安全问题。保持他们的快乐和系统安全已成为痛苦。

    有人可以告诉我,以防你遇到类似的问题并帮助我进行一些案例研究或者解决这个问题的方法吗? “免费”可用的测试工具,可用于测试网站在开发人员环境中的安全性?应该采用什么策略来处理这种情况?如何进步。

3 个答案:

答案 0 :(得分:4)

首先让我这样说:虽然有开源和免费的安全扫描工具,但没有一个是完美的。根据我的经验(至少使用PHP),他们倾向于返回足够的误报,因为它几乎不值得运行它们(但自从我上次使用它们以来,这本来可以变得更好)。如果您想使用一个来尝试帮助识别问题,请务必这样做。但是不要相信输出(从假阳性和假阴性的角度来看)。

就如何处理它而言,我会建议一步一步的方法。选择一种类型的漏洞,并在整个应用程序中消除它。然后转到下一个漏洞类型。所以潜在的游戏计划可能是(按严重程度和修复的顺序排序):

  1. 修复所有SQL注入漏洞。

    浏览代码,查找执行SQL查询的所有位置,并确保它们使用预准备语句,并且没有任何内容可以进入。

  2. 修复所有XSS漏洞

    查找所有本地信息(用户提交的或其他方式)已正确清理和转义的地方(具体取决于用例)。

  3. 修复所有CSRF漏洞

    浏览网站,确保所有表单提交都正确使用CSRF令牌系统,以保护他们免受欺诈性请求。

  4. 修复所有身份验证和会话修复漏洞

    确保身份验证和会话系统免受滥用。这包括确保您的cookie干净,并且经常轮换任何会话标识符。并确保您正确存储密码...

  5. 修复和信息注入漏洞

    您声明URL和隐藏表单元素中存在用户信息。浏览所有这些并进行更改,以便用户无法注入值。如果这意味着将数据存储到会话对象中,请执行此操作。

  6. 修复所有信息泄露漏洞

    这与前一点有关,但略有不同。如果您在URL中使用用户名,但通过更改它无法执行任何操作,那么它不是注入漏洞,而只是一个泄露问题。拖把它们,但它们几乎不是那么重要(取决于当然所披露的内容)。

  7. 修复输出

    修复编码问题以及可能生成无效输出的任何方法。确保输出后一切都清醒。

  8. 需要注意的重要一点是,您修复的任何内容都会使应用程序更安全。如果它现在是一个实时应用程序,请不要等待!不要试图做所有事情,测试和发布。选择合理大小的目标(最多工作2到4天),完成目标,测试和释放。然后冲洗并重复。通过迭代这个庄园中的问题,您可以随着时间的推移使网站更安全,更安全。这对你来说似乎不那么重要,因为总会看到你的目标。

    现在,如果应用程序足够严重,可能需要完全重写。如果是这种情况,我仍然建议在开始重写之前至少清理现有应用程序中的大件物品。在做其他任何事情之前,至少要清除SQL注入,XSS和CSRF漏洞。

    这不是一件容易的事。但是一次吃一小口,你可以在水中停留时取得重大进展 ......任何一点点都会有所帮助,所以将旅程视为一系列步骤而不是整体。你最终会变得更好......

答案 1 :(得分:1)

嗯,关于每个问题的谷歌都有助于修复它,所以我假设你只是担心实际的风险。

  1. 这很容易修复,只需更改为$_POST,这样会更安全一些,尤其是在与会话令牌一起使用时。
  2. 这仍然被广泛使用,所以我没有看到问题?
  3. Meh,只要在服务器端检查该数据,如果它没有验证,则用户必须重新连接或类似,这是可以接受的。当然,会话是首选,甚至是cookie。
  4. 整理是一项漫长的工作,除非在JS中显示密码等,否则没有问题。 Css + html几乎总是没有编码,所以这看起来很好。
  5. 我不是弹出窗口的粉丝,从不使用它们,在这里无法帮助。
  6. 好吧,如果可能的话,在本地托管脚本,并通过剥离标签,URL编码等方式清理任何必要的XSS。

答案 2 :(得分:0)

几年前,我在一个电子商务网站上遇到了这种情况。它在ASP.NET 1.1中,在代码质量和安全实践方面绝对令人震惊。此外,管理层告诉我,重写绝对是不可能的,并且无法说服他们对此采取行动。

在2年的时间里,我设法使这个系统符合PCI-DSS标准。这意味着我们必须逐一关闭所有这些安全漏洞,并采取措施确保它们不会再发生。

第一个问题是你必须找到所有的错误和安全漏洞。您可以使用外部漏洞探测工具(我推荐QualysGuard)。但手动测试是获得完整覆盖的唯一途径。编写旧的测试脚本以测试XSS,SQL注入,CSRF等,并寻求测试人员的帮助来运行这些脚本。如果您可以自动执行这些测试,那么非常值得。但是,不要因为太难以自动化而避免覆盖测试用例。如果您能够负担得起安全顾问,请让他们帮助您确定测试范围,并编写测试用例。

这会给你: a)错误/缺陷列表 b)一种可重复的方法来测试你是否真正修复了每一个

然后你可以开始重构和修复每个缺陷。

我遵循的流程是: 步骤1:重构,步骤2:测试&发布,第3步:返回步骤1。 即有一个连续的固定,测试和循环周期。释放。我建议您承诺定期部署到您的生产系统,例如每月,尽可能多地在每个发布周期中挤压“重构”。

我发现自动安全工具几乎无用,因为: a)他们可以为您提供虚假的安全感 b)他们可以给你这么多的误报,你会被无意义的切线所发送而不是真正的安全威胁。

您确实需要了解每个安全漏洞的性质,并确切了解其工作原理。这样做的一个好方法是研究每个缺陷(例如,从OWASP前10名开始),并编写一份文档,你可以给你团队中的任何开发人员,他们会准确地向他们解释你想要保护的每个缺陷是什么反对和为什么。我认为我们经常寻找帮助修复安全漏洞的工具,认为我们可以避免真正理解每个威胁的努力。一般来说,工具只对提高生产力有用 - 你仍然需要负责并运行节目。

资源:

1)阅读OWASP top 10

2)PCI-DSS规范也是非常好的东西,可以帮助您全面考虑安全性 - 即覆盖的方式不仅仅是Web应用程序,还包括数据库,进程,防火墙,DMZ / LAN分离等。即使它结束了最符合您要求的,值得浏览。