<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">2014-03-18 14:02 GMT+01:00 Dario Bertini <span dir="ltr"><<a href="mailto:berdario@gmail.com" target="_blank">berdario@gmail.com</a>></span>:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
2014-03-18 13:39 GMT+01:00 Manlio Perillo <<a href="mailto:manlio.perillo@gmail.com">manlio.perillo@gmail.com</a>>:<br>
<div class="">> eval è relativamente sicuro, dato che può eseguire solo espressioni, e non<br>
> statement completi come exec.<br>
> Lo puoi rendere ancora più sicuro limitando il namespace, ad esempio:<br>
<br>
</div>purtroppo, non basta:<br>
<a href="http://nedbatchelder.com/blog/201206/eval_really_is_dangerous.html" target="_blank">http://nedbatchelder.com/blog/201206/eval_really_is_dangerous.html</a><br>
<a href="http://nedbatchelder.com/blog/201302/finding_python_3_builtins.html" target="_blank">http://nedbatchelder.com/blog/201302/finding_python_3_builtins.html</a></blockquote><div><br></div><div>Grazie, avevo dimenticato di disabilitare i builtins, ma sembra che ancora non basti.</div>
<div><br></div><div>Allora, sempre usando gli strumenti già disponibili in Python, consiglio all'OP di guardare il codice della funzione ast.literal_eval.</div><div><br></div><div>Esegue un eval, ma restituisce l'AST del codice compilato, in modo da validare il codice da eseguire.   Risparmi un bel pò di tempo rispetto a pyparsing, perchè usi la grammatica di Python.  Lo svantaggio è che probabilmente devi gestire più casi.</div>
<div><br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div class=""><br>
><br>
> Questo però non basta, devi avere il controllo anche su value, ad esempio<br>
> accettando solo stringhe secondo un dato protocollo, di cui farai il parsing<br>
> e validazione.<br>
> Il mio protocollo preferito è "Typed NetStrings":<br>
>   "<typeid><len>:<literal><br>
> Ad esempio per un intero:<br>
>   "i3:777"<br>
><br>
> tale protocollo è facile da leggere, parsare e validare (perchè verboso)<br>
><br>
<br>
</div>sembra simile a un Type-Length-Value<br>
<br>
<a href="http://en.wikipedia.org/wiki/Type-length-value" target="_blank">http://en.wikipedia.org/wiki/Type-length-value</a><br>
<br></blockquote><div><br></div><div>Direi che è quello.</div><div><br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
se possibile, preferite linguaggi regolari ad un TLV o altro formato<br>
context-sensitive<br>
<br>
<a href="http://www.youtube.com/watch?v=v8F8BqSa-XY" target="_blank">http://www.youtube.com/watch?v=v8F8BqSa-XY</a><br>
<a href="http://langsec.org" target="_blank">http://langsec.org</a><br>
<div class="HOEnZb"><div class="h5"><br></div></div></blockquote><div><br></div><div>TLV non mi sembra abbia i problemi riportati in quei paper, ma non ho approfondito.</div><div><br></div><div><br></div><div>Ciao  Manlio</div>
</div><br></div></div>