(覺得這篇寫得還不錯,於是就掛到主頁來,希望諸高手指教)
-- 系列文章與stella forum v2.0搭配使用效果更好 --
就我現在掌握的知識並結合sf2來分析一下如何保護web應用程式
1.限制使用者的活動
2.伺服器端的驗證
3.**安全
1.限制使用者的活動
這是最基本的做法,「永遠不要相信使用者的輸入」是必須要記住的準則。用到web程式,就是要做下面的事情
b.限制使用者訪問
某些頁面是禁止一般使用者訪問的,比如管理頁面。這個時候就需要判斷登陸使用者是否有許可權察看該頁面。一般的做法就是使用基於角色的forms驗證。這個也是 很簡單的幾步就可以完成對程式的保護。關於這個的詳細資訊大家可以看我的主頁上該方面的筆記,應該是比較全了。
在這裡我只說一點:
上面那一句是允許角色是adminer的使用者訪問。經常有人問我:系統怎麼知道登陸的使用者是什麼角色?難道是神奇的……好了,到這裡就不要想了,目前來 說.net還沒有那麼智慧型,它所能做的就是按照人的設定執行。實際情況是使用者在登陸的時候,我們就執行乙個操作,把存在資料庫中的使用者的角色取出來,然後 新增到使用者的cookie中去,這樣每次請求的時候都會到cookie中去檢查角色的值,下面的語句就是執行了「把角色新增到cookie」的操作:
string role=((system.web.security.formsidentity)this.context.user.identity).ticket.userdata;
system.security.principal.genericprincipal gp=new system.security.principal.genericprincipal(this.context.user.identity,new string);
this.context.user=gp;
genericprincipal是什麼可以去看我的筆記了 :)
c.謹慎的展示資料
有些指令碼攻擊真是防不勝防,這個時候在顯示資料的時候最好就是原樣顯示,比如用htmlencode。
2.伺服器端的驗證
客戶端只是乙個瀏覽器,功能有限,所以更重要的驗證工作需要放到伺服器端,在這裡需要做的是
if( art.title.length >50 )
return "輸入的標題不符合要求!";
if( art.body.length==0 )
return "輸入的內容不能為空!";
//先檢測時間,再檢測標題
if(! checktime())
return "本論壇限制發帖時間間隔為"+config.stellaconfig.newtopictimespan.tostring()+"秒,請稍候再試!";
if(! checkcaption(art.title))
return "請不要重複提交相同的帖子";
art.body=securityhelper.clearscript(art.body);
return config.regexpress.well;
}像檢測時間和標題,清除指令碼這樣的任務,自然是交給伺服器端來執行。
b.預防sql注入攻擊
經過前面那麼多道關卡,還是會有危險的東西傳過來,sql注入攻擊就是其中的乙個問題。到這裡我們能做的,就是盡量使用引數來執行sql操作。這可以有效地防止此類攻擊。
3.**安全
這是.net的乙個特性。通過principalpermission特性來限制**的呼叫。
最基本的,只有登陸使用者才可以訪問密碼修改頁面。
[principalpermission(securityaction.demand,authenticated=true)]
public class pwdedit : baseskin
然後是只有管理員才可以訪問的管理頁面。
[principalpermission(securityaction.demand,role="adminer")]
public class placard : system.web.ui.page
給帖子置頂的操作只有版主可以執行。只有角色是版主的會員可以呼叫該方法。
[principalpermission(securityaction.demand,role="manager")]
private void topics_itemcommand(object source, repeatercommandeventargs e)
}關於這個得更詳細內容,也可以看我的主頁上的文章「60.擴充套件forms驗證」。
Stella 知識庫 模型類的設計
系列文章與stella forum v2.0搭配使用效果更好 這裡的模型類,在有些地方也叫 業務實體 等名字,一句話,是一些代表了軟體世界需求的剝離了行為的類。沒有了行為,這些類自然就是一些資料的集合,而他們的作用,自然也是傳遞資料。在分層的架構中,使用模型類來傳遞資料更加的有意義。說了這麼多,下面...
Stella 知識庫 認識論壇的結構
系列文章與stella forum v2.0搭配使用效果更好 將解決方案在vs開啟後,您會看到一長串的專案,這些專案的具體解釋可以看論壇的架構圖。肯定有人第一眼就暈了,呵呵,不要緊,慢慢來。您的第一反應應該是開啟web這個專案,然後檢視具體的頁面,比如default.aspx,該頁面的重要 如下 整...
知識的表示與知識庫
知識表示是人工智慧課程三大基礎 知識表示 知識推理以及知識應用 之一。在解決實際問題中,通常需要用到多種不同的表示方法,因為每種資料結構都有其優缺點,沒有哪種資料結構擁有多種功能,因此需要對知識根據具體應用而採用不同的知識表示方法。狀態空間法 為描述某類不同事物之間的差別,以符號表示其狀態,通過算符...