ASP.NET 安全认证(二)——灵活运用 Form 表单认证中的 deny 与 allow 及保护 .htm 等文件 ....
話說(shuō)上回,簡(jiǎn)單地說(shuō)了一下 Form 表單認(rèn)證的用法。或許大家覺(jué)得太簡(jiǎn)單,對(duì)那些大內(nèi)高手來(lái)說(shuō)應(yīng)該是“灑灑水啦”“小 Kiss 啦(小意思)”。今天咱們來(lái)點(diǎn)的花樣吧:古有六扇門(mén),拒收葉孤城;東門(mén)不刮風(fēng),吹雪姓西門(mén);緞帶作憑證,決戰(zhàn)紫禁城。
五、??????? Web.config 的作用范圍
新建項(xiàng)目時(shí), VS.Net 會(huì)在項(xiàng)目根目錄建立一個(gè)內(nèi)容固定的 Web.config。除了在項(xiàng)目根目錄,你還可以在任一目錄下建立 Web.config ,條件就是應(yīng)用程序級(jí)別的節(jié)點(diǎn)只能在根目錄的 Web.config 中出現(xiàn)。至于哪些是應(yīng)用程序級(jí)別節(jié)點(diǎn)呢,這個(gè)問(wèn)題嘛,其實(shí)我也不太清楚,呵呵。電腦不是我發(fā)明的,微軟不是我創(chuàng)建的,C# 更不是我說(shuō)了算的,神仙也有不知道的,所以我不曉得是正常的。話雖如此,只要它不報(bào)錯(cuò),那就是對(duì)的。
關(guān)于 Web.config 設(shè)置的作用范圍,記住以下兩點(diǎn):
1、? Web.config 的設(shè)置將作用于所在目錄的所有文件及其子目錄下的所有東東(繼承:子隨父姓)
2、? 子目錄下的 Web.config 設(shè)置將覆蓋由父目錄繼承下來(lái)的設(shè)置(覆蓋:縣官不如現(xiàn)管)
給大家提個(gè)問(wèn)題:有沒(méi)有比根目錄Web.config 的作用范圍還大的配置文件呢?看完第三部分便知分曉。
六、??????? 學(xué)會(huì)拒絕與巧用允許
回到我們?cè)诘谝换睾闲陆ǖ臏y(cè)試項(xiàng)目“FormTest” ,既然要進(jìn)行驗(yàn)證,按國(guó)際慣例,就得有用戶名與密碼。那,這些用戶是管理員自己在數(shù)據(jù)庫(kù)建好呢,還是用戶注冊(cè)、管理員審核好呢。只要不是一般的笨蛋,都知道選擇后者。你們還別說(shuō),我公司還真有個(gè)別項(xiàng)目是管理員連到數(shù)據(jù)庫(kù)去建帳號(hào)的,屬于比較特殊的笨蛋,咱們不學(xué)他也罷,還是老老實(shí)實(shí)添加兩個(gè)頁(yè)面吧——注冊(cè)頁(yè)面(Register.aspx)與審核頁(yè)面(Auditing.aspx)。
問(wèn)題終于就要浮出水面啦,當(dāng)你做好 Register.aspx 時(shí),想訪問(wèn)它的時(shí)候突然覺(jué)得不對(duì)勁,怎么又回到了登錄頁(yè)面?你仔細(xì)瞧瞧網(wǎng)址,是不是成了:Login.aspx?ReturnUrl=Register.aspx 。怎么辦,用戶就是因?yàn)闆](méi)有帳號(hào)才去訪問(wèn)注冊(cè)頁(yè)面的呀?(這句純屬?gòu)U話,有帳號(hào)誰(shuí)還跑去注冊(cè)。)我時(shí)常對(duì)我的同事說(shuō):“辦法是人想出來(lái)滴!!”
1、? 新建一個(gè)目錄 Public ,用于存放一些公用的文件,如萬(wàn)年歷、腳本呀……
2、? 在“解決方案資源管理器”中右擊點(diǎn)擊目錄 Public ,新增一個(gè)
Web.config
3、? 把上述 Web.config 的內(nèi)容統(tǒng)統(tǒng)刪除,僅留以下即可:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
? <system.web>
?? <authorization><allow users="*"/></authorization>
?</system.web>
</configuration>
終于切入正題了,不容易呀。根據(jù)“覆蓋”原則,我們知道上述 Web.config 將替代根目錄 Web.config 中的 <authorization> 節(jié)點(diǎn)設(shè)置,即:
?????? <allow users="*"/> 替換 <deny users="?"></deny>
注解:“allow”允許的意思;“*”表示所有用戶;
?????? ?“deny” 拒絕的意思;“?”表示匿名用戶;
因此,處于 Public 目錄下的文件,允許所有人瀏覽,包括未驗(yàn)證的用戶。把 Register.aspx 拖進(jìn)來(lái)吧,再也不會(huì)有人阻止你瀏覽啦。
除了注冊(cè)頁(yè)面,我們還提到一個(gè)審核頁(yè)面(Auditing.aspx),審核權(quán)限一般都在管理員或主管手里,并不想讓其他人瀏覽此頁(yè)面(真理往往掌握在少數(shù)人的手里,這也是沒(méi)法子的事),怎么辦?“辦法是人想出來(lái)滴”呵呵……新建一個(gè)管理員的目錄 ManageSys ,在此目錄下再新增一個(gè) Web.config。內(nèi)容如下:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.web>
<authorization>
<allow users="Admin"/>
<deny users="*"/>
</authorization>
? </system.web>
</configuration>
現(xiàn)在的問(wèn)題就是怎么才能知道誰(shuí)是“Admin”呢,這個(gè)問(wèn)題就有點(diǎn)象“我的鞋底有個(gè)洞”—— 天不知地知,你不知我知。閑話少說(shuō)(要是有稿費(fèi)多好,我就有多寫(xiě)幾個(gè)字的動(dòng)力,唉……),大家還記得我在第一部分的結(jié)尾嗎?什么,忘啦!罰你回去看一百遍,記住了再回來(lái)。站住,回來(lái)!一想到你的記性,我就不放心,第一部分的瀏覽網(wǎng)址是http://blog.csdn.net/cityhunter172/archive/2005/11/06/524043.aspx ,回到此處的網(wǎng)址是http://blog.csdn.net/cityhunter172/archive/2005/11/13/528463.aspx
好了,不管那些記不好的家伙了,大伙繼續(xù)往下看。
System.Web.Security.FormsAuthentication.SetAuthCookie(this.Txt_UserName.Text,false); //通過(guò)驗(yàn)證,發(fā)放 Cookie
之前我曾強(qiáng)調(diào),要注意,第一個(gè)參數(shù)很重要,重要到什么程度?說(shuō)到這,恐怕地球人都知道了——它就是allow與deny的依據(jù)。假如此處用戶填寫(xiě)的是“Admin”即 this.Txt_UserName.Text = "Admin"; 那么進(jìn)入系統(tǒng)后,他就能訪問(wèn) ManageSys 目錄下的網(wǎng)頁(yè)了,其它閑雜人等一律拒之門(mén)外。
為鞏固上述內(nèi)容,給大伙留個(gè)課外作業(yè):此項(xiàng)目有兩部門(mén)使用,其中每個(gè)部門(mén)分別都有些特定的頁(yè)面僅供本部門(mén)用戶瀏覽使用,請(qǐng)問(wèn)該如何使用 Web.config 達(dá)到效果?同樣,答案在第三部分揭曉
七、??????? 分散與集中
?
到目前為此,我們的測(cè)試項(xiàng)目“FormTest”已經(jīng)擁有兩個(gè)目錄三個(gè) Web.config ,伴隨用戶需求的多樣化,Web.config 也會(huì)越來(lái)越多,比如常用的文件上傳功能等等。眾多的 Web.config 分布在不同的目錄里面,維護(hù)起來(lái)肯定比較煩人。能不能集中起來(lái)管理呢,應(yīng)該咋辦哩?“辦法是……”喲,有人先說(shuō)出來(lái)啦。不錯(cuò),“辦法的確是人想出來(lái)滴” ,我不說(shuō),你是不是只有在一邊涼伴?開(kāi)玩笑的,為了讓更多的人記住這句話,我打算告訴你集中管理的辦法。
要想集中管理,不得不用到 <location> 節(jié)點(diǎn)與 path 屬性。在本項(xiàng)目中,我們將目錄 Public 與 ManageSys 下的設(shè)置放在根目錄下的 Web.config 里面,如下:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<location path ="Public">
? ????????? <system.web>
?? ???????????? <authorization>
<allow users="*"/>
</authorization>
??????????? </system.web>
?????? </location>
<location path ="ManageSys">
? ????????? <system.web>
?? ??? <authorization>
<allow users="Admin"/>
<deny users="*"/>
</authorization>
??????????? </system.web>
?????? </location>
?????? <system.web>
??????????????????????????? <!-- 這里放置原來(lái)根目錄 Web.config 的內(nèi)容,就不列出來(lái)了 -->
(本文出自寒羽楓 cityhunter172 的博客:http://blog.csdn.net/cityhunter172?個(gè)人站點(diǎn):http://172.meibu.com)
?????? </system.web>
</configuration>
?????? 需要提醒的是
1、? <location> 節(jié)點(diǎn)的位置是在 <configuration> 的一個(gè)子節(jié)點(diǎn),它與原有的 <system.web> 屬于并列關(guān)系
2、? <location> 節(jié)點(diǎn)只需要放入對(duì)應(yīng)子目錄 Web.config 中的 <system.web> 的節(jié)點(diǎn)內(nèi)容
八、??????? 額外的保護(hù)
第二部分就要結(jié)束了,現(xiàn)在時(shí)間已是凌晨?4 點(diǎn)50分,我容易嘛我。認(rèn)證的目的就是為了防止他人非法瀏覽頁(yè)面,或未經(jīng)許可使用某些功能。當(dāng)然,世上沒(méi)有絕對(duì)的安全,如今 MD5 加密都被我們國(guó)人給破解了,就是最好的例證。
細(xì)心的人可能早就發(fā)現(xiàn) ASP.NET 的安全認(rèn)證只針對(duì) .aspx、.ascx …… 等 ASP.NET 文件起作用,而對(duì)普通頁(yè)面與文件卻“視而不見(jiàn)”,如 .htm、.js 、.jpg 等。通過(guò)以下步驟你就可以保護(hù)你想保護(hù)的文件類(lèi)型。
1、? 打開(kāi) Internet 信息服務(wù)(IIS)管理器 → 右擊本項(xiàng)目虛擬 → 屬性,如下圖
(http://blog.csdn.net/images/blog_csdn_net/cityhunter172/85935/r_aspxForm01.JPG)
2、? 點(diǎn)擊按鈕“配置”,出現(xiàn)如下對(duì)話框:
(http://blog.csdn.net/images/blog_csdn_net/cityhunter172/85935/r_aspxForm02.JPG)
3、? 雙擊 .aspx 的應(yīng)用程序擴(kuò)展 → 查看對(duì)話框內(nèi)容,如下圖:
(http://blog.csdn.net/images/blog_csdn_net/cityhunter172/85935/r_aspxForm03.JPG)
4、? 復(fù)制“可執(zhí)行文件”的全路徑名稱后 → 點(diǎn)擊“取消”返回上一層對(duì)話框 → 點(diǎn)擊按鈕“添加”
5、? 粘貼剛才復(fù)制的內(nèi)容(我的系統(tǒng)裝在 D 盤(pán),所以內(nèi)容為 D:/WINDOWS/Microsoft.NET/Framework/v1.1.4322/aspnet_isapi.dll ) → 填寫(xiě)后綴名為 .htm → 填寫(xiě)動(dòng)作限制為“GET,HEAD,POST,DEBUG”(為方便省事你可選全部)
6、? 最后點(diǎn)擊“確定” → 往項(xiàng)目中添加 HtmlPage1.htm → 在 IE 瀏覽器的地址欄直接輸入http://localhost/FormTest/HtmlPage1.htm → 觀看測(cè)試效果
最后送大家一段 Web.config 設(shè)置,發(fā)完睡覺(jué),實(shí)在是困的不行了。
<location path ="決戰(zhàn)紫禁城">
? ????????? <system.web>
?? ???????????? <authorization>
<allow users="葉孤城"/>
<allow users="西門(mén)吹雪"/>
<deny users="*"/>
</authorization>
??????????? </system.web>
?????? </location>
<location path ="金鑾殿屋脊">
? ????????? <system.web>
?? ??? <authorization>
<allow users="腰系緞帶之人"/>
<deny users="*"/>
</authorization>
??????????? </system.web>
?????? </location>
本文摘自:http://blog.csdn.net/cityhunter172/article/details/524043
本文作者:寒羽楓
轉(zhuǎn)載于:https://www.cnblogs.com/hanshuhe/archive/2011/10/08/2202400.html
總結(jié)
以上是生活随笔為你收集整理的ASP.NET 安全认证(二)——灵活运用 Form 表单认证中的 deny 与 allow 及保护 .htm 等文件 ....的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 利用IShellExecuteHook接
- 下一篇: Android_WebView加载网页保