Melhor padrão para AllowUnsafeUpdates
Até agora, na minha pesquisa, vi que não é aconselhável definir AllowUnsafeUpdates na operação de solicitação GET para evitar scripts entre sites. Mas, se for necessário permitir isso, qual é a maneira correta de lidar com a situação para mitigar qualquer exposição?
Aqui está o meu primeiro palpite sobre um padrão confiável, se você absolutamente precisar permitir atualizações do site ou da Web em uma solicitação GET.
Melhor prática?
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
}
}
O feedback sobre o melhor padrão é apreciado.