[ASP.NET]Cross-Site Request Forgery(XSRF)

最近舊的ASP.NET Web Forms 專案,會被原碼掃描軟體掃出 XSRF 的Issue。

以下面程式為例,

//using System.Data.SqlClient;
protected void Page_Load(object sender, EventArgs e)
{
	//XSRF 的測試
	string input = Request.Form["comment"];
	string sql = "insert into Comments(comment) values (@comment);";
	SqlConnection connection = new SqlConnection("myConnString");
	connection.Open();
	SqlCommand command = new SqlCommand(sql, connection);
	command.Parameters.AddWithValue("comment", input);
	command.ExecuteNonQuery();
}

主要是因為從 Client 接到了 comment ,它並沒有被驗證過,是否本

因為是舊的專案,所以沒有針對 XSRF 來處理,所以導致得多這樣的行為的程式,都被掃出來。

那要如何修正呢? 其實 Visual Studio 2012(含)之後的專案範本中就有加入處理 XSRF 的 Code。

所以我們可以透過 Visual Studio 2013 新增一個 Web 專案,然選擇 Web Forms 範本,如下,

然後開啟 Site.Master.cs ,Copy 裡面的 3 個變數宣告及 Page_Init , master_Page_PreLoad Method , 

貼到舊的專案裡的 Master Page 之中,如下,

這樣如果是 Post Back 上來的就可以驗證是否為自已的 Page 而不是別人假造的。

因為程式中有使用 GUID.TryParse ,如果是 .NET 4.0 之前的版本,

可以參考 mrkt 的 Guid TryParse 文章哦。

 

Hi, 

亂馬客Blog已移到了 「亂馬客​ : Re:從零開始的軟體開發生活

請大家繼續支持 ^_^