适当范围的功能和方法

时间:2018-01-19 19:54:33

标签: asp.net vb.net security

我想问一个关于保护我的网站的问题。我有一个ASP.net站点,使用VB。我决定采用3层分法。所以,一个项目,有三个应用程序。第一个应用程序是网站,第二个是业务逻辑的类库,最后一个是数据库交互的类库。

我的问题是如何在项目外部访问和使用我的各层中的函数/子元素?由于每个库都在自己的项目中,因此我无法将函数/子函数设置为Private,Protected或Friends。但是,我想确保项目之外的其他实体可以访问资源。这是我的项目的示例布局:

  

MySolution

 MyWebSite - Has references to MyBusinessLayer and MyDataLayer class libraries

 MyBusinessLayer - Has a reference to MyDataLayer

 MyDataLayer - has no References

示例代码为:

MyWebsite加载:

Public DATA_PROXY As New MyDataLayer
Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load
    dim someData as new Users = DATA_PROXY.getSomeData()
    'do stuff with data
end Sub

MyBusinessLayer

Public Function getSomeData() As Users
      Dim conn As New myBussinessLayer
      Dim dr As SqlDataReader
      conn.Connect()
      dr = conn.getSomeDataFromDB()
      '...more code for logic done here and returns an object      
end function

MyDataLayer

 Public Function getSomeDataFromDB() As SqlDataReader
       Dim dr As SqlDataReader
      '... do stuff to get data from database 
       return dr
 end function

所以,你可以看到一切都是公开的。这是一个糟糕的模式吗?其他外部实体可以在部署后访问这些DLL吗?我应该有哪些安全问题?另外,使用这种开发模式有什么问题吗?

1 个答案:

答案 0 :(得分:1)

这是部分答案。

你开始走正确的道路。层的使用是隐藏(或封装)各种功能的概念,而不是那些不需要知道实现的功能。但是你对层的实现会让你感到悲伤。我将使用你的三层。我还将自由地使用术语“函数”,其中我指的是函数或子例程,具体取决于上下文。

使用(服务器端)ASP会有所帮助,因为输出是一个呈现的页面,而不是一系列暴露的函数调用或脚本(总是我的客户端JavaScript之一)。

MyWebsite应该具有面向公众的代码。这可以是将信息呈现到页面上,或验证和接受来自用户的输入的函数。紧紧管理函数调用(参数/参数),以便只获得预期的输入。

使用MyBusinessLayer和MyDataLayer,创建一些除了验证输入(函数参数/参数)之外什么都不做的接口/适配器函数,调用工作函数,然后验证输出(以便网站公开代码或跨脚本编写没有发生)。执行工作的所有其他功能(因此公开实际数据库的详细信息等)可以是私人或朋友。你可以做得越紧,就越容易安全。

这些额外的功能最初似乎更多的工作 - 但在稍后阶段有助于维护。如果数据库详细信息发生更改,则可以更新专用工作代码,但如果它提供相同类型的输出,则更高级别的接口不会更改,并且上面的所有层都不会更改。从安全角度来看,您现在已经将工作最小化,以检查由于代码更改而导致的任何安全问题。

回到原来的帖子:

  • 这是一个糟糕的模式吗?模式本身并不坏 - 正如我上面提到的那样,这种模式的实现很重要。
  • 其他外部实体可以访问这些DLL 部署?如果他们是公开的 - 是的。
  • 我应该有哪些安全问题?如果人们可以绕过您的界面功能(因为您的工作代码也是公开的),他们可以绕过您的验证。当然,您可以在您的工作代码中加入验证,但从经验来看,这会导致很多重复,错误和难以维护。这是一个很好的问题 - 考虑到安全性的设计,因为以后添加安全性要困难得多。所以 - 你最小化其他人可以看到和访问的内容。
  • 此外,使用这种开发模式是否有任何问题?我自己使用了这种开发模式(用户界面,业务逻辑,数据适配器)并且它可以工作。这是最初的工作,如果你像我一样(代码 - 运行 - 代码 - 解决我正在做的事情 - 设计一点 - 代码运行等),有时似乎是很多返工。但是,根据我的经验,这种短期的痛苦绝对值得长期收益。