Best Pattern for AllowUnsafeUpdates

Posted by webwires on Stack Overflow See other posts from Stack Overflow or by webwires
Published on 2008-10-17T21:14:32Z Indexed on 2010/04/13 8:03 UTC
Read the original article Hit count: 397

Filed under:
|
|

So far, in my research I have seen that it is unwise to set AllowUnsafeUpdates on GET request operation to avoid cross site scripting. But, if it is required to allow this, what is the proper way to handle the situation to mitigate any exposure?

Here is my best first guess on a reliable pattern if you absolutely need to allow web or site updates on a GET request.

Best Practice?

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
SPSecurity.RunWithElevatedPrivledges(delegate()
{
    using(SPSite site = new SPSite(SPContext.Current.Site.Url))
    {
    	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

    	}
    }
});

Feedback on the best pattern is appreciated.

© Stack Overflow or respective owner

Related posts about sharepoint

Related posts about spweb