Лучший шаблон для AllowUnsafeUpdates
До сих пор в своем исследовании я видел, что неразумно устанавливать AllowUnsafeUpdates в операции GET-запроса, чтобы избежать межсайтового скриптинга. Но, если это необходимо, как правильно справиться с ситуацией, чтобы смягчить воздействие?
Вот мое первое предположение о надежном шаблоне, если вам абсолютно необходимо разрешить обновления веб-сайтов или сайтов по запросу GET.
Лучшая практика?
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
}
}
Отзывы о лучших шаблонах приветствуются.