为什么这在 Sharepoint 中被视为 "Unsafe Update"?
Why is this considered an "Unsafe Update" in Sharepoint?
我有这样的代码来有条件地创建一个 Sharepoint 列表(某种更新插入):
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 "All Site Content" 集市上删除了它)有问题(可能是 'unsafe update')?
为了保护自己免受 XSS 和会话劫持之类的攻击,对 SharePoint 网站的大多数更新都与嵌入在用户进行更改的同一页面上的表单摘要控件相关联。如果触发更新时该表单摘要控件中的信息不存在,SharePoint 会假设最坏的情况。这在服务器端代码可能以提升的权限执行的情况下尤为重要。
如您所见,在进行任何更改之前立即将 SPWeb 对象的 AllowUnsafeUpdates
属性 切换为 true
即可轻松避免这种情况。
我有这样的代码来有条件地创建一个 Sharepoint 列表(某种更新插入):
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 "All Site Content" 集市上删除了它)有问题(可能是 'unsafe update')?
为了保护自己免受 XSS 和会话劫持之类的攻击,对 SharePoint 网站的大多数更新都与嵌入在用户进行更改的同一页面上的表单摘要控件相关联。如果触发更新时该表单摘要控件中的信息不存在,SharePoint 会假设最坏的情况。这在服务器端代码可能以提升的权限执行的情况下尤为重要。
如您所见,在进行任何更改之前立即将 SPWeb 对象的 AllowUnsafeUpdates
属性 切换为 true
即可轻松避免这种情况。