Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何处理旧网站的安全问题?_C#_Asp.net_Security_Iis - Fatal编程技术网

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

C# 如何处理旧网站的安全问题?,c#,asp.net,security,iis,C#,Asp.net,Security,Iis,我最近登陆了一个旧的web应用程序,它充满了老派的把戏 获取参数:URL参数中的用户信息 会议信息 用于存储信息的隐藏元素 页面中转储的HTML/JS/CSS。没有正确的编码。等 窗口。打开以显示弹出窗口。 XSS问题等。 串联SQL字符串适用于盲SQL攻击。 还有更多 使事情顺利进行。看起来应用程序在过去5-7年ASP.NET 1.1中已经过时,并且应用程序代码似乎无法跟上更好的安全实践的步伐 谢天谢地,看起来浏览器和安全测试工具在一段时间内发展得很好。帮助人们/客户时不时地报告如此多的安全问

我最近登陆了一个旧的web应用程序,它充满了老派的把戏

获取参数:URL参数中的用户信息 会议信息 用于存储信息的隐藏元素 页面中转储的HTML/JS/CSS。没有正确的编码。等 窗口。打开以显示弹出窗口。 XSS问题等。 串联SQL字符串适用于盲SQL攻击。 还有更多

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

谢天谢地,看起来浏览器和安全测试工具在一段时间内发展得很好。帮助人们/客户时不时地报告如此多的安全问题。让他们开心和系统安全已经成为一种痛苦


如果你遇到类似的情况,请有人告诉我,并帮助我进行案例研究或了解如何解决这个问题?可以免费使用的测试工具,这些工具可用于在开发人员环境中测试网站的安全性?应对这种情况应该采取什么策略?如何取得进展。

好吧,谷歌对每一个问题都有帮助,所以我假设你只是担心实际的风险

这很容易修复,只需更改为$\u POST,这会更加安全,尤其是与会话令牌一起使用时。 这仍然被广泛使用,所以我看不出有什么问题? Meh,只要数据在服务器端被检查,并且如果它没有被验证,用户就必须重新登录或类似的操作,这是可以接受的。当然,会话是首选,甚至cookie也是首选。 整理只是一项长期的工作,没有问题,除非密码等被披露在JS。Css+html几乎总是未编码的,所以这看起来不错。 我只是不喜欢弹出窗口,而且从不使用它们,在这里我无能为力。 好吧,如果可能的话,在本地托管脚本,并通过剥离标记、URL编码之类的方式清理任何必要的XS。
好吧,谷歌对每一个问题都会有帮助,所以我假设你只是担心实际的风险

这很容易修复,只需更改为$\u POST,这会更加安全,尤其是与会话令牌一起使用时。 这仍然被广泛使用,所以我看不出有什么问题? Meh,只要数据在服务器端被检查,并且如果它没有被验证,用户就必须重新登录或类似的操作,这是可以接受的。当然,会话是首选,甚至cookie也是首选。 整理只是一项长期的工作,没有问题,除非密码等被披露在JS。Css+html几乎总是未编码的,所以这看起来不错。 我只是不喜欢弹出窗口,而且从不使用它们,在这里我无能为力。 好吧,如果可能的话,在本地托管脚本,并通过剥离标记、URL编码之类的方式清理任何必要的XS。
让我先说一句:虽然有开源和免费的安全扫描工具,但没有一个是完美的。在我使用PHP的经验中,至少它们会返回足够多的误报,几乎不值得运行它们,但自从我上次使用它们以来,这可能会变得更好。如果你想用它来帮助识别问题,一定要这样做。但无论从假阳性还是假阴性的角度来看,都不要相信输出

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

修复所有SQL注入漏洞

仔细阅读代码,找到它执行SQL查询的所有地方,确保它们使用的是准备好的语句,并且没有任何东西可以进入

修复所有XSS漏洞

根据用例,查找本地用户提交的信息或其他信息被正确清理和转义的所有位置

修复所有CSRF漏洞

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

修复所有身份验证和会话固定漏洞

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

修复和信息注入漏洞

您声明URL和隐藏表单元素中存在用户信息。检查并更改所有这些值,以便用户不能在他们不能插入的地方插入值。如果这意味着将数据存储到会话对象中,请执行此操作

修复所有信息披露漏洞

这与前一点有关,但略有不同。如果您在URL中使用用户名,但无法通过更改它来做任何事情,那么这不是一个注入漏洞,只是一个泄露 问题把这些都清理掉,但它们并没有那么关键,当然这取决于所披露的内容

修正输出

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

需要注意的重要一点是,您所修复的任何东西都将使应用程序更加安全。如果它现在是一个实时应用程序,不要等待!不要试图做任何事情,测试和发布。选择一个合理大小的目标,最多工作2到4天,完成目标、测试和发布。然后冲洗并重复。通过反复研究这个庄园中的问题,您正在使站点变得越来越安全。这对你来说似乎是少了点工作,因为总有一个终点在眼前

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


这不是一件容易的事。但是一次咬一小口,你可以在水面上取得显著的进步。。。任何一点点都会有帮助,所以把旅程看作是一系列的步骤,而不是一个整体。最后你会过得更好…

让我先说一句:虽然有开源和免费的安全扫描工具,但没有一个是完美的。在我使用PHP的经验中,至少它们会返回足够多的误报,几乎不值得运行它们,但自从我上次使用它们以来,这可能会变得更好。如果你想用它来帮助识别问题,一定要这样做。但无论从假阳性还是假阴性的角度来看,都不要相信输出

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

修复所有SQL注入漏洞

仔细阅读代码,找到它执行SQL查询的所有地方,确保它们使用的是准备好的语句,并且没有任何东西可以进入

修复所有XSS漏洞

根据用例,查找本地用户提交的信息或其他信息被正确清理和转义的所有位置

修复所有CSRF漏洞

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

修复所有身份验证和会话固定漏洞

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

修复和信息注入漏洞

您声明URL和隐藏表单元素中存在用户信息。检查并更改所有这些值,以便用户不能在他们不能插入的地方插入值。如果这意味着将数据存储到会话对象中,请执行此操作

修复所有信息披露漏洞

这与前一点有关,但略有不同。如果您在URL中使用用户名,但无法通过更改它来做任何事情,那么这不是一个注入漏洞,只是一个泄露问题。把这些都清理掉,但它们并没有那么关键,当然这取决于所披露的内容

修正输出

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

需要注意的重要一点是,您所修复的任何东西都将使应用程序更加安全。如果它现在是一个实时应用程序,不要等待!不要试图做任何事情,测试和发布。选择一个合理大小的目标,最多工作2到4天,完成目标、测试和发布。然后冲洗并重复。通过反复研究这个庄园中的问题,您正在使站点变得越来越安全。这对你来说似乎是少了点工作,因为总有一个终点在眼前

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


这不是一件容易的事。但是一次咬一小口,你可以在水面上取得显著的进步。。。任何一点点都会有帮助,所以把旅程看作是一系列的步骤,而不是一个整体。你最终会过得更好…

我几年前在一个电子商务网站上遇到过这种情况。它出现在ASP.NET1.1中,绝对令人震惊 在代码质量和安全性实践方面。此外,管理层告诉我,完全不可能重新编写,也无法说服他们在这方面做出让步

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

第一个问题是你必须找到所有的bug和安全漏洞。您可以使用我推荐的外部漏洞探测工具。但是手动测试是获得完全覆盖的唯一方法。编写老式的测试脚本来测试XSS、SQL注入、CSRF等,并寻求测试人员的帮助来运行这些脚本。如果您可以自动化这些测试,那么这是非常值得做的。但是不要仅仅因为测试用例太难自动化就避免覆盖它。如果您负担得起安全顾问的费用,让他们帮助您确定测试覆盖范围并编写测试用例

这将为您提供: 错误/缺陷列表 b如果你真的修复了每一个问题,这是一种可重复的测试方法

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

我遵循的过程是: 步骤1:重构,步骤2:测试和发布,步骤3:返回步骤1。 即,有一个固定、测试和发布的连续循环。我建议您定期部署生产系统,例如每月一次,并在每个发布周期中尽可能多地进行重构

我发现自动安全工具几乎毫无用处,因为: 他们会给你一种虚假的安全感 b他们会给你太多的误报,以至于你被送去处理毫无意义的事情,而不是处理真正的安全威胁

您确实需要了解每个安全漏洞的性质,并确切了解其工作原理。这样做的一个好方法是研究每个缺陷,例如从OWASP前10名开始,编写一份文档,你可以给你的团队中的任何开发人员,向他们解释你试图防范的每个缺陷以及原因。我认为,我们经常使用工具来帮助修复安全缺陷,认为我们可以避免真正理解每一种威胁。一般来说,工具只对提高生产力有用——你仍然需要负责并主持演出

资源:

1读这本书


2 PCI-DSS规范也是非常好的东西,可以帮助您全面思考安全问题,即不仅涵盖web应用程序,还包括数据库、流程、防火墙、DMZ/LAN分离等。即使它超出了您的要求,它非常值得浏览。

几年前,我在一个电子商务网站上遇到了这种情况。它出现在ASP.NET1.1中,在代码质量和安全实践方面绝对令人震惊。此外,管理层告诉我,完全不可能重新编写,也无法说服他们在这方面做出让步

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

第一个问题是你必须找到所有的bug和安全漏洞。您可以使用我推荐的外部漏洞探测工具。但是手动测试是获得完全覆盖的唯一方法。编写老式的测试脚本来测试XSS、SQL注入、CSRF等,并寻求测试人员的帮助来运行这些脚本。如果您可以自动化这些测试,那么这是非常值得做的。但是不要仅仅因为测试用例太难自动化就避免覆盖它。如果您负担得起安全顾问的费用,让他们帮助您确定测试覆盖范围并编写测试用例

这将为您提供: 错误/缺陷列表 b如果你真的修复了每一个问题,这是一种可重复的测试方法

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

我遵循的过程是: 步骤1:重构,步骤2:测试和发布,步骤3:返回步骤1。 即,有一个固定、测试和发布的连续循环。我建议您定期部署生产系统,例如每月一次,并在每个发布周期中尽可能多地进行重构

我发现自动安全工具几乎毫无用处,因为: 他们会给你一种虚假的安全感 b他们会给你太多的误报,以至于你被送去处理毫无意义的事情,而不是处理真正的安全威胁

您确实需要了解每个安全漏洞的性质,并确切了解其工作原理。这样做的一个好方法是研究每个缺陷,例如从OWASP前10名开始,编写一份文档,你可以给你的团队中的任何开发人员,向他们解释你试图防范的每个缺陷以及原因。我认为,我们经常需要工具来帮助金融机构 x安全缺陷,认为我们可以避免真正了解每个威胁的努力。一般来说,工具只对提高生产力有用——你仍然需要负责并主持演出

资源:

1读这本书

2 PCI-DSS规范也是非常好的东西,可以帮助您全面思考安全问题,即不仅涵盖web应用程序,还包括数据库、进程、防火墙、DMZ/LAN分离等。即使它超出了您的要求,也值得浏览