我正在开发一个与Google Maps连接的ASP.NET应用程序,并从数据库中检索标记信息。标记信息被分成数据库中的表,其中表的名称反映公司(例如CompanyA_MarkerData,CompanyB_MarkerData等)。为了使用新的标记数据定期更新地图,我在JavaScript中使用setTimeout来定期调用我的“UpdateMarkers”JavaScript函数。 'UpdateMarkers'调用Web服务,该服务执行数据库查询并将标记列表返回给JavaScript,然后JavaScript更新地图。
我对此方法的主要问题是我的Web服务要求我将公司名称传递给它,以便它知道数据库中的哪个表可以访问。您可以想象,这会带来安全风险,因为任何人都可以将不同的公司名称传递给Web服务,并且能够从其他公司以及他们自己的公司检索数据。
为了避免这个问题,我按如下方式重构我的程序:当系统管理员为我的应用程序创建用户时,他们也可以为该用户分配公司ID。使用ASP.NET中的Profile对象存储公司ID。我正在将Web服务代码移动到具有共享功能的类中,以便只能在我的页面中调用它们(但不能由任何人调用,例如Web服务)。这些功能仍然需要传递给公司名称。但是,JavaScript不会直接调用这些共享函数,而是调用一组页面方法(据我所知,它不像Web服务那样公开)。然后,这些页面方法将使用Profile对象检索附加到当前登录用户的公司名称,然后调用我的共享数据库函数并将信息返回给JavaScript。
我认为第二种方法比第一种方法更安全,因为我不允许客户端将不同的选项传递给我的代码并检索未经授权的数据。服务器端代码计算出需要发送的参数。但是,我想知道是否有一种更好的方法来做到这一点我错过了?
由于
- 阿姆鲁
答案 0 :(得分:1)
您只需要检查服务器端是否允许用户访问该公司的数据。
我假设您正在使用AJAX,因为您说您正在使用Javascript从您自己的数据库中检索信息。因此,无论您调用哪个服务器端脚本/程序,都要将用户身份验证代码放在那里。