これまでの調査で、クロス サイト スクリプティングを回避するために GET 要求操作で AllowUnsafeUpdates を設定するのは賢明ではないことがわかりました。しかし、これを許可する必要がある場合、暴露を軽減するために状況を処理する適切な方法は何ですか?
これは、GET 要求で Web またはサイトの更新を絶対に許可する必要がある場合の、信頼できるパターンに関する私の最善の最初の推測です。
ベストプラクティス?
protected override void OnLoad(System.EventArgs e)
{
if(Request.HttpMethod == "POST")
{
SPUtility.ValidateFormDigest();
// will automatically set AllowSafeUpdates to true
}
// If not a POST then AllowUnsafeUpdates should be used only
// at the point of update and reset immediately after finished
// NOTE: Is this true? How is cross-site scripting used on GET
// and what mitigates the vulnerability?
}
// Point of item update
using(SPSite site = new SPSite(SPContext.Current.Site.Url, SPContext.Current.Site.SystemAccount.UserToken))
{
using (SPWeb web = site.RootWeb)
{
bool allowUpdates = web.AllowUnsafeUpdates; //store original value
web.AllowUnsafeUpdates = true;
//... Do something and call Update() ...
web.AllowUnsafeUpdates = allowUpdates; //restore original value
}
}
最良のパターンに関するフィードバックをお待ちしております。