c# - 如何处理存在安全问题的旧网站?

标签 c# asp.net security iis

我最近登陆了一个充满老派技巧的旧网络应用程序

  1. GET param : URL参数中的用户信息
  2. session 信息
  3. 用于存储信息的隐藏元素
  4. HTML/JS/CSS 转储到页面中。没有适当的编码。等
  5. Window.open 以显示弹出窗口。
  6. XSS 问题等
  7. 串联 SQL 字符串适用于盲目 SQL 攻击。

还有更多...

让事情顺利进行。看起来应用程序在过去 5-7 年 (ASP.NET 1.1) 中已经过时,而且应用程序代码似乎未能跟上更好的安全实践的步伐。

值得庆幸的是,浏览器和安全测试工具似乎随着时间的推移发展得很好。时不时地帮助人们/客户报告如此多的安全问题。让他们开心和系统安全已经变成了痛苦。

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

最佳答案

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

至于如何解决它,我建议采用循序渐进的方法。选择一种类型的漏洞,并在整个应用程序中消除它。然后转到下一个漏洞类型。因此,潜在的游戏计划可能是(按修复的严重性和难易程度排序):

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

    检查代码,找到它执行 SQL 查询的所有地方,并确保它们使用的是准备好的语句并且没有任何内容可以进入。

  2. 修复所有XSS漏洞

    查找本地信息(用户提交的或其他方式)经过适当清理和转义(取决于用例)的所有位置。

  3. 修复所有 CSRF 漏洞

    浏览网站并确保所有提交的表单都正确使用 CSRF token 系统以保护它们免受欺诈请求。

  4. 修复所有身份验证和 session 固定漏洞

    确保身份验证和 session 系统不会被滥用。这涉及确保您的 cookie 是干净的,并且任何 session 标识符都经常轮换。并确保您正确存储密码...

  5. 修复和信息注入(inject)漏洞

    您声明在 URL 和隐藏的表单元素中有用户信息。遍历所有这些并更改它,以便用户不能在他们不应该能够的地方注入(inject)值。如果这意味着将数据存储到 session 对象中,请这样做。

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

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

  7. 修复输出

    修复编码问题和任何可能产生无效输出的方法。确保输出时一切正常。

需要注意的重要一点是,您修复的任何内容都会使应用程序更安全。如果现在是实时应用程序,请不要等待!不要试图什么都做,测试和发布。选择一个合理大小的目标(最多 2 到 4 天的工作),完成目标,测试并发布。然后冲洗并重复。通过反复解决这个庄园中的问题,您可以使站点越来越安全。对您来说,这似乎工作量较小,因为总有一个尽头。

现在,如果应用程序足够严重,可能需要完全重写。如果是这样的话,我仍然建议在开始重写之前至少清理现有应用程序中的重要项目。在执行任何其他操作之前,至少清除 SQL 注入(inject)、XSS 和 CSRF 漏洞。

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

关于c# - 如何处理存在安全问题的旧网站?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4971833/

相关文章:

c# - MVC 4 - 路由到非区域 Controller 的问题

c# - 如何在 ASP.NET Core 中的 DbSet 实例上使用 Find(params object[] keyValues) 方法?

android - webview android 中的 TLS/SSLv3

c# - 配置与静态属性、安全问题

c# - 如何使用linq通过多个变量从列表中删除对象

c# - Pen.Dispose 是否处理底层画笔?

c# - 何时以及如何交换 .NET 托管堆?

c# - 什么时候 using 语句框它的参数,当它是一个结构?

asp.net - 以不同模式运行多个集线器的 Azure SignalR 服务

regex - 带有正则表达式的 MongoDB findOne(安全漏洞?)