[ASP.NET]Cross Site History Manipulation (XSHM)

Cross Site History Manipulation (XSHM) 要如何解呢?

最近有個系統被掃到有「Cross-Site History Manipulation: XSHM」的Issue。

什麼Code會被找出有這樣子的問題呢? 如下面的Pattern,

If (CONDITION)
           Redirect(Page B)

 

我們被掃到的點會在 if ,程式碼如下,

string conditionA = Request.QueryString["id"];
if (conditionA.Equals("A", StringComparison.InvariantCultureIgnoreCase))
{
    Response.Redirect("SayHello.aspx");
}
else
{
    Response.Redirect("Page1.aspx");
}

 

那要如何解決呢?

我們可以著重在 History,所以可以讓要轉過去的Page跟之前的URL不重覆,如下,

string conditionA = Request.QueryString["id"];
Random rnd = new Random();
string ranValue = rnd.Next().ToString();

if (conditionA.Equals("A", StringComparison.InvariantCultureIgnoreCase))
{
    Response.Redirect("SayHello.aspx?rn=" + ranValue);
}
else
{
    Response.Redirect("Page1.aspx?rn=" + ranValue);
}

 

如果有更好的做法,請跟大家分享哦! 謝謝!

 

參考資料

Cross-Site History Manipulation: XSHM

Hi, 

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

請大家繼續支持 ^_^