我最近登陆了一个充满老派技巧的旧网络应用程序
- GET param : URL参数中的用户信息
- session 信息
- 用于存储信息的隐藏元素
- HTML/JS/CSS 转储到页面中。没有适当的编码。等
- Window.open 以显示弹出窗口。
- XSS 问题等
- 串联 SQL 字符串适用于盲目 SQL 攻击。
还有更多...
让事情顺利进行。看起来应用程序在过去 5-7 年 (ASP.NET 1.1) 中已经过时,而且应用程序代码似乎未能跟上更好的安全实践的步伐。
值得庆幸的是,浏览器和安全测试工具似乎随着时间的推移发展得很好。时不时地帮助人们/客户报告如此多的安全问题。让他们开心和系统安全已经变成了痛苦。
如果您遇到类似的事情,有人可以告诉我并帮助我进行一些案例研究或解决此问题的方法吗? “免费”可用的测试工具,可用于测试网站在开发人员环境中的安全性?应该使用什么策略来处理这种情况?如何进步。
最佳答案
首先让我这样说:虽然有开源和免费的安全扫描工具,但没有一个是完美的。根据我的经验(至少使用 PHP),它们往往会返回足够多的误报,以至于几乎不值得运行它们(但自从我上次使用它们以来,情况可能会变得更好)。如果您想使用一个来尝试帮助识别问题,请务必这样做。但是不要以任何方式相信输出(从假阳性和假阴性的角度来看)。
至于如何解决它,我建议采用循序渐进的方法。选择一种类型的漏洞,并在整个应用程序中消除它。然后转到下一个漏洞类型。因此,潜在的游戏计划可能是(按修复的严重性和难易程度排序):
修复所有 SQL 注入(inject)漏洞。
检查代码,找到它执行 SQL 查询的所有地方,并确保它们使用的是准备好的语句并且没有任何内容可以进入。
修复所有XSS漏洞
查找本地信息(用户提交的或其他方式)经过适当清理和转义(取决于用例)的所有位置。
修复所有 CSRF 漏洞
浏览网站并确保所有提交的表单都正确使用 CSRF token 系统以保护它们免受欺诈请求。
修复所有身份验证和 session 固定漏洞
确保身份验证和 session 系统不会被滥用。这涉及确保您的 cookie 是干净的,并且任何 session 标识符都经常轮换。并确保您正确存储密码...
修复和信息注入(inject)漏洞
您声明在 URL 和隐藏的表单元素中有用户信息。遍历所有这些并更改它,以便用户不能在他们不应该能够的地方注入(inject)值。如果这意味着将数据存储到 session 对象中,请这样做。
修复所有信息泄露漏洞
这与前一点有关,但略有不同。如果您在 URL 中使用了用户名,但通过更改它无法执行任何操作,那么它不是注入(inject)漏洞,它只是一个披露问题。把它们擦掉,但它们几乎没有那么重要(当然取决于披露的内容)。
修复输出
修复编码问题和任何可能产生无效输出的方法。确保输出时一切正常。
需要注意的重要一点是,您修复的任何内容都会使应用程序更安全。如果现在是实时应用程序,请不要等待!不要试图什么都做,测试和发布。选择一个合理大小的目标(最多 2 到 4 天的工作),完成目标,测试并发布。然后冲洗并重复。通过反复解决这个庄园中的问题,您可以使站点越来越安全。对您来说,这似乎工作量较小,因为总有一个尽头。
现在,如果应用程序足够严重,可能需要完全重写。如果是这样的话,我仍然建议在开始重写之前至少清理现有应用程序中的重要项目。在执行任何其他操作之前,至少清除 SQL 注入(inject)、XSS 和 CSRF 漏洞。
这不是一件容易的事。但是一次咬一小口,你可以在保持水面的同时取得重大进步......任何一点点都会有所帮助,所以将旅程视为一系列步骤而不是一个整体。你最终会过得更好......
关于c# - 如何处理存在安全问题的旧网站?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4971833/