.net多层结构 sql注入
1,功能單一型
解釋:比如一個軟件是由
界面部分 User Interface+ 代碼邏輯 Business Logic Layer+ 數(shù)據(jù)庫部分 Data Access Layer
組成。
但是為什么一個常見的軟件要搞得這么復(fù)雜?為什么不能把以上三種融為一體。這樣不就避免了
【中間件】的學(xué)習(xí)成本了?
但是界面有winform html 這種標(biāo)準(zhǔn)極致的,和用戶交互的;代碼邏輯有許多編程語言來實現(xiàn)對數(shù)據(jù)完整性的約束;
數(shù)據(jù)庫可以連接界面與數(shù)據(jù)。
而這些東西都在特定的方面做到極致,都有專注自己擅長的領(lǐng)域。它們組合起來就得到了完美的軟件。即功能單一性。
大型企業(yè)組織結(jié)構(gòu)的管理模式的優(yōu)點:容錯率高,可替換性強,上限高。
缺點:不靈活,效率低,速度慢。小型企業(yè)反之。
它借鑒企業(yè)組織結(jié)構(gòu)的管理模式,實現(xiàn)的一種多人團(tuán)隊協(xié)作開發(fā)模式。
而多層結(jié)構(gòu)與軟件的組成結(jié)構(gòu)有很多相似點。每個部分做好每個部分的事情,相互聯(lián)系,一個地方出錯,可以精確定位到
bug的地方,里面很多偽方法,各司其責(zé),互不干擾,實現(xiàn)功能。
一個解決方案里添加了多個項目,而每個項目就做各自的事情,每個項目互相引用通過偽方法各自傳值,進(jìn)行數(shù)據(jù)的交流。
比如登錄
1,界面 UI 2,判斷賬號密碼 BLL 3,匹配數(shù)據(jù)庫里的賬號密碼 DAL
UI界面需要用窗體,獲得值就行了,再傳給BLL層。
BLL層進(jìn)行非空判斷,再通過偽方法給 DAL層
DAL層進(jìn)行匹配,得到返回數(shù)據(jù),給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();//參數(shù)化技術(shù),取代字符串拼接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注入!");} //缺點是不能看到 參數(shù) 要再數(shù)據(jù)庫 sql server profiler看其它層,幫助層,暫時叫實體層。ENTITY
對其它三層起輔助作用的層。
比如設(shè)計一個方法,如果參數(shù)很多,就很復(fù)雜,但是把這些參數(shù),放到一個類,把這個類放入實體層。
這時參數(shù)就是一個object 的類了,返回值可以是泛型集合。
這樣,提高了代碼的復(fù)用率了。
寫在最后:
用多層結(jié)構(gòu)開發(fā)軟件的詳細(xì)步驟
1,對數(shù)據(jù)表進(jìn)行需求分析,各種業(yè)務(wù),想象功能點
2,搭建基本多層結(jié)構(gòu),正確的讓其相互應(yīng)用
3,針對你的需求分析,設(shè)計偽方法
4,實現(xiàn)偽方法和功能
通用的規(guī)范標(biāo)準(zhǔn)是十分重要的。
1,一個數(shù)據(jù)表必須在實體層中存在一個實體類用于對其它層作輔助,傳值的載體
2,這個類中有按要求的屬性,字段,構(gòu)造
3,每個層的命名規(guī)范 表名-DAL 表名-BLL
4,一個類必須至少5個方法 Get() Get(string id) Update() Add() Delete()
其它的方法靈活變通。
總結(jié)
以上是生活随笔為你收集整理的.net多层结构 sql注入的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: command对象提供的3个execut
- 下一篇: VBA错误处理