Stella 知識庫 保護你的web程式

2021-09-05 13:58:31 字數 2233 閱讀 4332

(覺得這篇寫得還不錯,於是就掛到主頁來,希望諸高手指教)

-- 系列文章與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,該頁面的重要 如下 整...

知識的表示與知識庫

知識表示是人工智慧課程三大基礎 知識表示 知識推理以及知識應用 之一。在解決實際問題中,通常需要用到多種不同的表示方法,因為每種資料結構都有其優缺點,沒有哪種資料結構擁有多種功能,因此需要對知識根據具體應用而採用不同的知識表示方法。狀態空間法 為描述某類不同事物之間的差別,以符號表示其狀態,通過算符...