我正在开发一个 ASP.NET 应用程序,它与 Google Maps 交互并从数据库中检索标记信息。标记信息在数据库中被拆分为表,其中表的名称反映了公司(例如,CompanyA_MarkerData、CompanyB_MarkerData 等)。为了使用新的标记数据定期更新地图,我在 JavaScript 中使用 setTimeout 来定期调用我的“UpdateMarkers”JavaScript 函数。“UpdateMarkers”调用执行数据库查询并将标记列表返回给 JavaScript 的 Web 服务,JavaScript 进而更新地图。
这种方法的主要问题是我的 Web 服务要求我将公司名称传递给它,以便它知道要访问数据库中的哪个表。正如您可以想象的那样,这会带来安全风险,因为任何人都可以将不同的公司名称传递给 Web 服务,并能够从其他公司以及他们自己的公司检索数据。
为了避免这个问题,我将我的程序重组如下:当系统管理员为我的应用程序创建用户时,他们也可以为这个用户分配一个公司 ID。公司 ID 使用 ASP.NET 中的 Profile 对象存储。我正在将 Web 服务代码移动到具有共享功能的类中,以便它们只能在我的页面中调用(但不能被任何人调用,例如 Web 服务)。这些函数仍然需要传递给它们的公司名称。但是,JavaScript 不会直接调用这些共享函数,而是调用一组页面方法(据我了解,这些方法不像 Web 服务那样公开)。
我认为第二种方法比第一种方法更安全,因为我不允许客户端将不同的选项传递给我的代码并检索未经授权的数据。服务器端代码计算出需要发送的参数。但是,我想知道是否有更好的方法可以做到这一点而我错过了?
谢谢
--Amr