Почему это считается "небезопасным обновлением" в 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 непосредственно перед внесением каких-либо изменений.

Другие вопросы по тегам