==========================Django 1.1.4 release notes==========================Welcome to Django 1.1.4!This is the fourth "bugfix" release in the Django 1.1 series,improving the stability and performance of the Django 1.1 codebase.With one exception, Django 1.1.4 maintains backwards compatibilitywith Django 1.1.3. It also contains a number of fixes and otherimprovements. Django 1.1.4 is a recommended upgrade for anydevelopment or deployment currently using or targeting Django 1.1.For full details on the new features, backwards incompatibilities, anddeprecated features in the 1.1 branch, see the :doc:`/releases/1.1`.Backwards incompatible changes==============================CSRF exception for AJAX requests--------------------------------Django includes a CSRF-protection mechanism, which makes use of atoken inserted into outgoing forms. Middleware then checks for thetoken's presence on form submission, and validates it.Prior to Django 1.2.5, our CSRF protection made an exception for AJAXrequests, on the following basis:* Many AJAX toolkits add an X-Requested-With header when usingXMLHttpRequest.* Browsers have strict same-origin policies regardingXMLHttpRequest.* In the context of a browser, the only way that a custom headerof this nature can be added is with XMLHttpRequest.Therefore, for ease of use, we did not apply CSRF checks to requeststhat appeared to be AJAX on the basis of the X-Requested-With header.The Ruby on Rails web framework had a similar exemption.Recently, engineers at Google made members of the Ruby on Railsdevelopment team aware of a combination of browser plugins andredirects which can allow an attacker to provide custom HTTP headerson a request to any website. This can allow a forged request to appearto be an AJAX request, thereby defeating CSRF protection which truststhe same-origin nature of AJAX requests.Michael Koziarski of the Rails team brought this to our attention, andwe were able to produce a proof-of-concept demonstrating the samevulnerability in Django's CSRF handling.To remedy this, Django will now apply full CSRF validation to allrequests, regardless of apparent AJAX origin. This is technicallybackwards-incompatible, but the security risks have been judged tooutweigh the compatibility concerns in this case.Additionally, Django will now accept the CSRF token in the custom HTTPheader X-CSRFTOKEN, as well as in the form submission itself, for easeof use with popular JavaScript toolkits which allow insertion ofcustom headers into all AJAX requests.Please see the :ref:`CSRF docs for example jQuery code <csrf-ajax>`that demonstrates this technique, ensuring that you are looking at thedocumentation for your version of Django, as the exact code necessaryis different for some older versions of Django.