<p dir="ltr"><br>
On Aug 19, 2015 8:45 PM, "Yury Selivanov" <<a href="mailto:yselivanov.ml@gmail.com">yselivanov.ml@gmail.com</a>> wrote:<br>
><br>
> On 2015-08-19 8:49 PM, Eric V. Smith wrote:<br>
>><br>
>> On 8/19/2015 8:28 PM, Steven D'Aprano wrote:<br>
>>><br>
>>> On Wed, Aug 19, 2015 at 08:15:05PM -0400, Eric V. Smith wrote:<br>
>>>><br>
>>>> On 8/19/2015 7:43 PM, Guido van Rossum wrote:<br>
>>>>><br>
>>>>> How important is it really to *hide* the fact that this involves a<br>
>>>>> function call?<br>
>>>><br>
>>>> The only reason PEPs 498 and 501, and by extension Yuri's proposal, have<br>
>>>> any difference over a function call is the ability to evaluate the<br>
>>>> embedded expressions in the local context, before the function is<br>
>>>> called.<br>
>>><br>
>>> Isn't that exactly what a normal function call does?<br>
>>><br>
>>> func(expr)<br>
>>><br>
>>> evaluates expr in the local context before the function is called.<br>
>><br>
>> Yes. But you couldn't write:<br>
>><br>
>> sql('select {columns} from {table}')<br>
>><br>
>> And have it get columns and table from where the sql function were<br>
>> called. See the discussions preceding PEP 498.<br>
>><br>
>>> Yuri linked to the Javascript reference for this feature, which<br>
>>> explicitly warns that "template strings" are a security risk:<br>
>>><br>
>>> <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/template_strings">https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/template_strings</a><br>
>>><br>
>>> It looks to me that the sql'...' version above is trivially vunerable to<br>
>>> code injection attacks.<br>
>><br>
>> The sql function could do all of the correct escaping. What's generally<br>
>> to be avoided is building the strings without escaping.<br>
><br>
><br>
> Exactly.<br>
><br>
> I'm not sure I buy the security risk argument -- in fact it is<br>
> safer to use sql'...' than to write something like<br>
><br>
>    db.query('select  ... where {}'.format(request.get['id']))</p>
<p dir="ltr">One should almost never use str.format for parameterizing SQL queries (how is this distinct what DBAPI solves for)?</p>
<p dir="ltr">Again, SQLAlchemy dialects demonstrate that this is more complex than just escaping sqlite / ANSI SQL keywords.</p>
<p dir="ltr">><br>
><br>
>><br>
>> And there's no particular reason that the sql function would even return<br>
>> a string: it might return an object that generated and stored the string<br>
>> "select ? from ?" and stored the values for columns and names (dbapi<br>
>> qmark style).<br>
><br>
><br>
> Right, it should be able to return anything.<br>
><br>
> Yury<br>
><br>
> _______________________________________________<br>
> Python-ideas mailing list<br>
> <a href="mailto:Python-ideas@python.org">Python-ideas@python.org</a><br>
> <a href="https://mail.python.org/mailman/listinfo/python-ideas">https://mail.python.org/mailman/listinfo/python-ideas</a><br>
> Code of Conduct: <a href="http://python.org/psf/codeofconduct/">http://python.org/psf/codeofconduct/</a><br>
</p>