C# 设计安全的intranet(ASP.NET)应用程序

C# 设计安全的intranet(ASP.NET)应用程序,c#,asp.net,sql-server,vb.net,web-services,C#,Asp.net,Sql Server,Vb.net,Web Services,我想知道是否需要在此asp.net应用程序-web表单(仅在网络域和VPN连接上提供)上添加任何其他类型的安全性? 应用程序环境:Asp.net 4.0、Vb.net、Oracle 10g、Web服务、Windows server 2003或2008,托管在域上 用户身份验证模式:窗口(不使用asp.net成员资格) 身份验证场景: 应用程序可以通过内部网站访问,系统使用用户的系统用户名对用户进行身份验证。在默认页面上,系统将首先获取当前用户名(HttpContext.current.user.

我想知道是否需要在此asp.net应用程序-web表单(仅在网络域和VPN连接上提供)上添加任何其他类型的安全性?

应用程序环境:Asp.net 4.0、Vb.net、Oracle 10g、Web服务、Windows server 2003或2008,托管在域上

用户身份验证模式:窗口(不使用asp.net成员资格)

身份验证场景:
应用程序可以通过内部网站访问,系统使用用户的系统用户名对用户进行身份验证。在默认页面上,系统将首先获取当前用户名(HttpContext.current.user.Identity.name),然后在用户表(oracle DB)中进行匹配,如果匹配,则存储过程将返回与此用户组相关的所有访问权限(菜单详细信息)。oracle数据库中有一个用户组和权限表。 在存储过程中,系统还将在任何DML事务之前检查用户权限

主要安全问题

专业:根据权限限制用户访问信息。普通用户不应该访问其他用户的数据


次要:我们不希望任何人在办公网络之外进入我们的系统。

正如Joachim所说,这种安排只支持在本地网络上运行的Windows系统。转向基本身份验证将允许更多的客户端连接,但在没有HTTPS的情况下在网络上公开密码(实际上是明文)。表单身份验证与此类似

如果没有服务器身份验证,用户可能会在不知情的情况下被重定向到类似的服务器,或者遭受中间主攻击。HTTPS通过服务器证书为您提供此服务。这在本地网络上可能不是一个问题,但用户的
主机
(在c:\windows\system32\drivers\etc中)文件通常易受攻击

在没有加密的情况下,任何用户都可以嗅探通过网络发送回和转发的信息,假设他们在同一子网中。对于大多数应用程序来说,这可能是一个可接受的风险,但如果信息是敏感的,例如包含敏感信息或个人信息,则不可接受

如果人们正在执行批准等重要操作,请考虑重播攻击(请参见示例)

考虑审核对数据库的访问,特别是用户组和权限表。有人可以添加他们自己或将他们移动到一个组中,执行一个操作,然后删除他们自己。检查您的页面是否存在SQL注入和类似的攻击,这些攻击可能会实现这一点


总之,人们妥协或干扰系统的可能性有多大?您愿意投资多少来保护它?假设服务器可以处理负载,HTTPS作为第一步很难通过。

不确定您使用的是哪种ASP.Net技术(MVC/Razor/Web表单)

如果您使用的是Web表单,则可以立即利用like。他们使用(无论是否使用ASP.net成员资格)。你也可以利用

如果您的内联网服务器未公开(以任何方式)在您的网络中,则应该对其进行“保护”。当然,这是一个大胆的声明,完全取决于您的网络实施-例如子网、内部网络/无nat/路由/无端口转发、无dns等。这使得VPN成为您的唯一的外部暴露点,然后,您必须为您的VPN基础设施实施适当的安全策略,例如一次性密码、客户端检查等


更新:

如果您使用的是Active Directory,则可以在AD中创建用户/组以提供相应的访问权限(例如,财务广告组只能访问“财务”文件夹)。然而,除了Internet Explorer之外,我还没有跟上对NTLM浏览器支持的步伐

但是,您确实提到了用户数据在Oracle数据库中(?)。我不熟悉使用db/Oracle不允许登录屏幕访问(网络资源)的解决方案


此外,这意味着VPN访问的一次性密码可能不可用。查看基于令牌的VPN,这样用户仍然可以使用其广告凭据,但每次都需要一个新令牌-这将有助于减少“黄色便笺中的密码”(因为您可以更严格地控制令牌)。

而不是https,只有在公司网络上的人才能访问它,也可以通过VPN访问。如果你不担心公司内的任何人获得错误的信息,那么你应该处于良好状态,但考虑到向域的一部分计算机推出证书是多么容易,我个人还是会选择HTTPS。这完全取决于您需要的安全级别,总是需要添加更多的安全级别,这都是一种权衡。例如,您的页面是否缓存在笔记本电脑上,可能会被盗?如果人们在电脑上的便笺上写下密码,而清洁人员对此感兴趣,会发生什么情况?这是一个时间表应用程序,我们不希望普通用户访问其他人的数据,为此,我在oracle DB中定义了用户组和权限。关于清洁人员,在进入windows之前,他们需要先输入系统(BIOS)密码,然后输入窗口密码。你们能告诉我更多关于笔记本电脑缓存页面的信息吗?我在问题中添加了一些关于主要安全问题的文字。是的,我认为在IIS上安装SSL会很好。@user1263981我已经解决了其中一些问题,例如SQL注入、机密性和重播攻击。这是一个web表单应用程序,根据要求,用户需要在没有任何登录/密码屏幕的情况下进行身份验证。这是一个asp.net应用程序(不是intranet站点)并且它可以在本地域上访问。我想我的题目有点让人困惑。已经有一个内部网站在该公司和我设计的时间表应用程序,可以运行