summaryrefslogtreecommitdiff
path: root/docs
diff options
context:
space:
mode:
authorCarl Meyer <carl@oddbird.net>2014-10-06 11:28:11 -0600
committerCarl Meyer <carl@oddbird.net>2014-10-06 11:28:11 -0600
commit844ba211ceea11ad2aa81f6a55c518228dd33a53 (patch)
treec72c19dbd35a082bbc135517fe4cb127133a8a1a /docs
parentec2fd02bb3f9f7e732de1566e81f84637e29f161 (diff)
parent04bd84786d39b8a17620dfb3b354599d8d95417b (diff)
Merge pull request #3307 from Markush2010/ticket23602
Fixed #23602 -- Add comment on get_absolute_url regarding user input
Diffstat (limited to 'docs')
-rw-r--r--docs/ref/models/instances.txt13
1 files changed, 13 insertions, 0 deletions
diff --git a/docs/ref/models/instances.txt b/docs/ref/models/instances.txt
index f5147090b4..aa38081074 100644
--- a/docs/ref/models/instances.txt
+++ b/docs/ref/models/instances.txt
@@ -660,6 +660,19 @@ framework </ref/contrib/syndication>`, use ``get_absolute_url()`` when it is
defined. If it makes sense for your model's instances to each have a unique
URL, you should define ``get_absolute_url()``.
+.. warning::
+
+ You should avoid building the URL from un-validated user input, in order to
+ reduce possibilities of link or redirect poisoning::
+
+ def get_absolute_url(self):
+ return '/%s/' % self.name
+
+ If ``self.name`` is ``'/example.com'`` this returns ``'//example.com/'``
+ which, in turn, is a valid schema relative URL but not the expected
+ ``'/%2Fexample.com/'``.
+
+
It's good practice to use ``get_absolute_url()`` in templates, instead of
hard-coding your objects' URLs. For example, this template code is bad: