我想问一个关于保护我的网站的问题。我有一个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吗?我应该有哪些安全问题?另外,使用这种开发模式有什么问题吗?
答案 0 :(得分:1)
这是部分答案。
你开始走正确的道路。层的使用是隐藏(或封装)各种功能的概念,而不是那些不需要知道实现的功能。但是你对层的实现会让你感到悲伤。我将使用你的三层。我还将自由地使用术语“函数”,其中我指的是函数或子例程,具体取决于上下文。
使用(服务器端)ASP会有所帮助,因为输出是一个呈现的页面,而不是一系列暴露的函数调用或脚本(总是我的客户端JavaScript之一)。
MyWebsite应该具有面向公众的代码。这可以是将信息呈现到页面上,或验证和接受来自用户的输入的函数。紧紧管理函数调用(参数/参数),以便只获得预期的输入。
使用MyBusinessLayer和MyDataLayer,创建一些除了验证输入(函数参数/参数)之外什么都不做的接口/适配器函数,调用工作函数,然后验证输出(以便网站公开代码或跨脚本编写没有发生)。执行工作的所有其他功能(因此公开实际数据库的详细信息等)可以是私人或朋友。你可以做得越紧,就越容易安全。
这些额外的功能最初似乎更多的工作 - 但在稍后阶段有助于维护。如果数据库详细信息发生更改,则可以更新专用工作代码,但如果它提供相同类型的输出,则更高级别的接口不会更改,并且上面的所有层都不会更改。从安全角度来看,您现在已经将工作最小化,以检查由于代码更改而导致的任何安全问题。
回到原来的帖子: