Почему это считается "небезопасным обновлением" в Sharepoint?
У меня есть код, подобный этому, чтобы условно создать список Sharepoint (вроде upsert):
private void ConditionallyCreateList()
{
SPWeb site = SPContext.Current.Web;
// Check to see if list already exists; if so, exit
if (site.Lists.TryGetList(listTitle) != null) return;
SPListCollection lists = site.Lists;
SPListTemplateType listTemplateType = new SPListTemplateType();
listTemplateType = SPListTemplateType.GenericList;
string listDescription = "This list retains vals inputted for the Post Travel form";
Guid ListId = lists.Add(listTitle, listDescription, listTemplateType);
. . .
Это сработало при первом создании и последующих выпусках приложения.
Тем не менее, я сделал некоторые радикальные изменения в структуре списка и удалил старую, чтобы (я надеялся) создать новую с новой структурой. Однако вместо того, чтобы получить рефакторированный список, я получил это в последней строке, показанной выше:
Microsoft.SharePoint.SPException was unhandled by user code
Message=Updates are currently disallowed on GET requests. To allow updates on a GET, set the 'AllowUnsafeUpdates' property on SPWeb.
Я смог решить эту проблему, добавив указанный код:
site.AllowUnsafeUpdates = true;
... но зачем это нужно? Почему создание списка, который больше не должен существовать (я удалил его из базы Sharepoint "Все содержимое сайта"), проблематичен (потенциально "небезопасное обновление")?
1 ответ
Чтобы защитить себя от таких вещей, как XSS и перехват сеансов, большинство обновлений сайта SharePoint привязаны к элементу управления дайджестом форм, встроенному в ту же страницу, с которой пользователь вносит изменения. Если информация из этого элемента управления дайджестом формы отсутствует при запуске обновления, SharePoint принимает худшее. Это особенно важно в тех случаях, когда серверный код может выполняться с повышенными привилегиями.
Как вы обнаружили, этого легко избежать, переключая объект SPWeb AllowUnsafeUpdates
собственность на true
непосредственно перед внесением каких-либо изменений.