I second what Luke and Russ have already said.

If what you're interested in is a way to securely allow users to enter
template code into the database, you can just write a custom field
that validates its input for security problems.

Here's a third-party implementation of a validator for such a field:
https://github.com/ithinksw/philo/blob/master/philo/validators.py#L106

This particular implementation:

- lets you explicitly allow particular tags (in which case all other
tags are disallowed for the field)
- lets you explicitly disallow particular tags (in which case all
other tags are allowed for the field)
- disallows the load, extends, include, and debug template tags by
default, but lets the backend developer specify the field as
"insecure" if they want to.

My point being - if what you want is to let people specify template
code in database fields, there are ways to make it secure without
rewriting the template engine.

On Nov 16, 4:04 pm, Russell Keith-Magee <russ...@keith-magee.com>
wrote:
> On Wed, Nov 16, 2011 at 5:12 PM, Roald <downa...@gmail.com> wrote:
> > Hi all,
>
> > Can anybody explain why template tag libraries are loaded from
> > *inside* a template? The more I work with them, the more I get the
> > feeling that specifying which template tags are available in a
> > template should be specified in the view-code (or more general: the
> > thing that loads/renders the template). Why would I, as a back-end
> > developer, make *all* of my template tags available to the front-end
> > developer in *all* templates?
>
> I'm afraid I don't follow how it would make sense for template tags to
> be loaded anywhere *except* inside a template.
>
>  * The view constructs the context data that is to be available for rendering.
>
>  * The template determines how that context data will be rendered.
>
>  * A template tag is a block of functionality that can be used to
> manipulate the display of data.
>
> The decision to use a particular template tag is entirely a front-end
> decision. True, it might require some coordination with backend
> developers to provide specific functionality (e.g., writing a specific
> data transformation, or writing a tag to extract specific data), but I
> fail to see how that division of labor suggests that the decision to
> make a template tag available at all should be controlled by the
> backend developer.
>
> > A great benefit of moving the template tag library loading to code,
> > would be that the template language could also be safely used in
> > CharFields/TextFields, without the risk of users using unwanted
> > template tags.
>
> If I'm understanding this correctly, your use case here is putting
> template content into a CharField or TextField, but you don't want to
> be subjected to injection-style attacks from on user content. This
> strikes me as a pretty obscure edge case to drive the design of the
> template language.
>
> > Of course, for backward compatibility, this can't be changed. The
> > thing I'm most interested in, though, is restricting the template tag
> > libraries that can be used in a template from my view-code. This can
> > be done in a backward compatible way.
>
> As with Luke, count me as a -1 on this. Luke's final paragraph sums up
> the situation nicely, IMHO:
>
>     if your use case is "allow end users to use the template
>     system safely", this feature wouldn't come close to doing that.
>     If your use case is "stop front-end developers deliberately doing
>     naughty things", I'd say the solution can't be a technical one.
>
> Yours,
> Russ Magee %-)

-- 
You received this message because you are subscribed to the Google Groups 
"Django developers" group.
To post to this group, send email to django-developers@googlegroups.com.
To unsubscribe from this group, send email to 
django-developers+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/django-developers?hl=en.

Reply via email to