最近舊的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:從零開始的軟體開發生活」
請大家繼續支持 ^_^