.net多层结构 sql注入
1,功能單一型
解釋:比如一個軟件是由
界面部分 User Interface+ 代碼邏輯 Business Logic Layer+ 數據庫部分 Data Access Layer
組成。
但是為什么一個常見的軟件要搞得這么復雜?為什么不能把以上三種融為一體。這樣不就避免了
【中間件】的學習成本了?
但是界面有winform html 這種標準極致的,和用戶交互的;代碼邏輯有許多編程語言來實現對數據完整性的約束;
數據庫可以連接界面與數據。
而這些東西都在特定的方面做到極致,都有專注自己擅長的領域。它們組合起來就得到了完美的軟件。即功能單一性。
大型企業組織結構的管理模式的優點:容錯率高,可替換性強,上限高。
缺點:不靈活,效率低,速度慢。小型企業反之。
它借鑒企業組織結構的管理模式,實現的一種多人團隊協作開發模式。
而多層結構與軟件的組成結構有很多相似點。每個部分做好每個部分的事情,相互聯系,一個地方出錯,可以精確定位到
bug的地方,里面很多偽方法,各司其責,互不干擾,實現功能。
一個解決方案里添加了多個項目,而每個項目就做各自的事情,每個項目互相引用通過偽方法各自傳值,進行數據的交流。
比如登錄
1,界面 UI 2,判斷賬號密碼 BLL 3,匹配數據庫里的賬號密碼 DAL
UI界面需要用窗體,獲得值就行了,再傳給BLL層。
BLL層進行非空判斷,再通過偽方法給 DAL層
DAL層進行匹配,得到返回數據,給UI層。
引用UI引用BLL,BLL引用DAL,DAL再引用ado.net 的類庫。
```csharp //下面是sql注入的一種,這種sql寫法是有問題的,可以破解登錄。 select count(*) from admin where id = '' and pwd = ' ' or '1' = '1 'public class DBHelper1{public static object GetData(string sql,SqlParameter[] paras){string address = "Data Source = .; Initial Catalog = MySchool; Integrated Security = True";using (SqlConnection con = new SqlConnection(address)){SqlCommand cmd = new SqlCommand(sql,con);con.Open();//參數化技術,取代字符串拼接cmd.Parameters.AddRange(paras);return cmd.ExecuteScalar();}}}private void button2_Click(object sender, EventArgs e){string sql = "select * from admin where loginid = @id and loginpwd = @pwd";SqlParameter[] paras = new SqlParameter[] {new SqlParameter("@id",textBox1.Text),new SqlParameter ("@pwd",textBox2.Text)};int i = Convert.ToInt32(DBHelper1.GetData(sql, paras));if (i > 0)MessageBox.Show("驗證成功,不會遭到sql注入!");} //缺點是不能看到 參數 要再數據庫 sql server profiler看其它層,幫助層,暫時叫實體層。ENTITY
對其它三層起輔助作用的層。
比如設計一個方法,如果參數很多,就很復雜,但是把這些參數,放到一個類,把這個類放入實體層。
這時參數就是一個object 的類了,返回值可以是泛型集合。
這樣,提高了代碼的復用率了。
寫在最后:
用多層結構開發軟件的詳細步驟
1,對數據表進行需求分析,各種業務,想象功能點
2,搭建基本多層結構,正確的讓其相互應用
3,針對你的需求分析,設計偽方法
4,實現偽方法和功能
通用的規范標準是十分重要的。
1,一個數據表必須在實體層中存在一個實體類用于對其它層作輔助,傳值的載體
2,這個類中有按要求的屬性,字段,構造
3,每個層的命名規范 表名-DAL 表名-BLL
4,一個類必須至少5個方法 Get() Get(string id) Update() Add() Delete()
其它的方法靈活變通。
總結
以上是生活随笔為你收集整理的.net多层结构 sql注入的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: command对象提供的3个execut
- 下一篇: 从零开始学python项目_从零开始可以