Category Archives: ASP.Net MVC

Remove Reponse Header on ASP.Net MVC – 移除 ASP.Net MVC 的響應頭

最近公司終於分配了一些比較有趣的任務給我
可以明正言順地在公司做Research
之後測試
這個任務就是增強公司的那個ASP.Net MVC 網站的保安
以免被人入侵

最了一些research之後 發現有很多東西可以做 以減少被入侵的風險
今天想介紹給大家的是把 如何把MVC 的 Server Response Header 移除

原因
當有某一些安全漏洞被發現時
E.G. 針前某一些web server或 programming language
如果你的 web site的 Reponse Header把你的Server Config都 Response出來的話
那麼入侵者便可以得容易知道你的網站可以是下一個目標

E.G.

Default的ASP.Net MVC Website Response Header會把 Web Server的 資料
E.G. IIS 是什麼 Version
用那一個.Net Framework和那一個 ASP.Net Version 都沒有保留地 response出來
Google Chrome Console website response header

解決方法:

Global.asax 上 加入以下的 程式碼

  protected void Application_PreSendRequestHeaders()
        {
            Response.Headers.Remove("Server");
            Response.Headers.Remove("X-AspNet-Version");
            Response.Headers.Remove("X-AspNetMvc-Version");
            Response.Headers.Remove("X-Powered-By");
         
        }
        

Hope you find it useful

HTTP Error 404.3 – Not Found The page you are requesting cannot be served because of the extension configuration. If the page is a script, add a handler. If the file should be downloaded, add a MIME map.

Freelance的那個 ASP.Net MVC 5 Project 上加了一些新的 CSS 檔案..
當中有一些 CSS 檔是reference 了到一些 Font 既檔案上 “.woff2
誰不知 Default的 ASP.Net MVC 沒有config可以 serve 這個file extension
所以嘗網頁嘗試 Load 這個 file 是便出現 HTTP 404.3 Not Found

HTTP Error 404.3 – Not Found The page you are requesting cannot be served because of the extension configuration. If the page is a script, add a handler. If the file should be downloaded, add a MIME map.”
HTTP Error 404.3 - Not Found The page you are requesting cannot be served because of the extension configuration. If the page is a script, add a handler. If the file should be downloaded, add a MIME map.

解決方法十分簡單
我們只需要在Web.config上 加上容許那些MIME 檔案 extension便可以了

  <system.webServer>
 <staticContent>
 <mimeMap fileExtension=".woff2" mimeType="application/font-woff2" />
 </staticContent>
 </system.webServer>

Web.config add supported MIME type
Hope you find it useful

ASP.Net MVC 5 Membership.GetUser() Issue

今天公司發佈了新的網站

由于沒有好好的做QA / 測試..
所以今天發現了很多的問題…
[如果他們一早聽我之前建議的做法..應該不用那麼失策的]

今天的其中一個問題是和 Asp.Net MembershipAsp.Net Identity有關的
自從Asp.Net MVC 5開始 Asp.netMembership 便用了 ASP.Net Identity 來取代
之前的 ASP.NET MembershipSimple Membership systems
ASP.NET MembershipSimple Membership systems便不能在ASP.Net MVC 5的網站上使用
ASP.Net Identity vs ASP.Net Membership system

所以公司的其中一位同事便將公司另一個網站的asp.net mvc3轉乘mvc5在他的電腦上測試是完全沒有問題的
當我們要把所有系統更新的時候把網站發放到伺服器上變出現了一個登入的問題在登入期間需要花一分半鐘才能進入主頁
公司的其中一個網絡顧問說是我們程式碼的問題..

但是我的同事卻說在他電腦上運行沒有問題
所以應該是網絡的問題
[作一些沒有意思的Argue]
最後因為覺得沒有意思浪費時間說誰對誰錯
所以我變進行了一個小小的除錯個步驟
發現應該是這個程式碼的問題

之後發現原來同事升級網頁的時候真的直接把Asp.Net MVC3 升級到 Asp.Net MVC5
但是沒有把所有和membership有相關的程式碼轉換成使用identity
所以當我在除錯模式是執行這個網頁是在membership這個功能花了很久才能執行下一段程式碼
解決方法十分簡單我們只需要把所有和membership相關的程式碼轉換成identity便可

解決方法
我們只需要把之前使用的 Membership.GetUser()
轉成 User.Identity 便可以了

E.G.
<pre>
string Username = Membership.GetUser().UserName;
</pre>
轉成
<pre>
string Username = HttpContext.Current.User.Identity.GetUserName();
</pre>

Hope you find it useful

How do you handle Javascript on ASP.Net MVC Website – ASP.Net MVC 5

最近開始再次學習ASP.Net MVC 5
科技推出得太快..很多東西都想學..
所以常常都被不同的東西分了心

開始寫ASP.Net MVC 5的時候..嘗試做cshtml上使用JQuery做一些東西
我的程式碼如下:
HTML

<h2 id="header">Javascript Section Demo - Failed</h2>

<div id="result">
    Original Div Content
    <p>
        Wait for Javascript to Load
    <p>
</div>

Javascript

   <script>
        $(document).ready(function () {
        $("#result").html("Javascript Excuted");
        $("#header").html("Javascript Section Demo - Success");
    });
</script>

誰不知..當我執行時出現了以下的錯誤..
Uncaught ReferenceError: $ is not defined
ASP.Net MVC - Uncaught ReferenceError: $ is not defined

Failed Demo:
http://sharechiwaimvccloud.apphb.com/JsDemo/MvcJsScriptInitSample

在想為什麼他認不了JQuery的呢?
原來ASP.Net MVC 新增了一個 SectionScripts的Tag
這個可以增加網頁的效能..
通常寫網頁的都建議把所有和Rendering沒有關係的程式碼都放在網頁的底部..
這可以令到網頁顯然得更快

解決方法
我們只要加所有和Javascript 相關係程式碼放進這個
Section scripts tag 內便可以了
E.G.


@section Scripts
{
    <script>
        $(document).ready(function () {
        $("#result").html("Javascript Excuted");
        $("#header").html("Javascript Section Demo - Success");
    });
</script>
}

Javascript working on ASP.Net MVC

Working Demo:
http://sharechiwaimvccloud.apphb.com/JsDemo/MvcJsScriptInitSample?isSuccess=true

Hope you find it useful

ASP.net MVC Session Time out

在寫ASP.Net MVC 的程式時..常常發現 很快便會Session time out
很多時候在開發過程中.. 都可能要Debug..更改Stored procedure 或其他的東西..
很多時候都可能沒有按過頁面的連結超過20分鐘.. 過了二十多分鐘得再按下連結時..
便會出現登出發沒有顯示資料等等的情況..

這時候很大機會是Session timeout所導致的..

解決方法十分簡單..
只要在開發模式中的Web.config 修改一下 Session State timeout的時間便可以了
E.G.

Web.configSystem.web分支下 加入 或修改 “sessionState timeout” 的屬性 便可以了

  <system.web>
	  <sessionState timeout="60" />
</system.web>

Hope you find it useful