[Python-3000] Addition to PEP 3101

Guido van Rossum guido at python.org
Tue May 1 21:11:31 CEST 2007

On 5/1/07, Jim Jewett <jimjjewett at gmail.com> wrote:
> On 5/1/07, Guido van Rossum <guido at python.org> wrote:
> > On 5/1/07, Jim Jewett <jimjjewett at gmail.com> wrote:
> > > There are some things you can safely do with even arbitrary objects --
> > > such as appending them to a list.
> > > By mentioning security as a reason to restrict the format, it suggests
> > > that this is another safe context.  It isn't.
> > But your presumption that the map is already evil makes it irrelevant
> > whether the format is safe or not. Having the evil map is the problem,
> > not passing it to the format operation.
> Using a map was probably misleading.  Let me rephrase:
> While the literal string itself is safe, the format function is only
> as safe as the objects being formatted.  The example below gets
> person.name; if the person object itself is malicious, then even this
> attribute access could run arbitrary code.
>      "My name is {0.name}".format(person)

And my point is that the security concerns here are not about
malicious arguments to the format() method; that's not part of the
threat model. If you have a person object in your program you can't
trust, you have a problem whether or not you use the format method.

 The threat we're concerned here (as Patrick explained in his
response) is format strings provided by translators or non-root
webmasters or (less likely) end users. Translation is probably the
main use case; another use case is exemplified by mailman, which gives
list owners the means to edit list-specific html templates which are
used as format strings. We want to prevent those folks from
(accidentally or intentionally) crashing the web server or elevating
their privileges.

--Guido van Rossum (home page: http://www.python.org/~guido/)

More information about the Python-3000 mailing list