danke für die antworten erstmal!
Also falls du den string vor dem eval wirklich duch ein repr() schickst und der user nach dem repr() nichts mehr dran machen kann, dann bin ich ziemlich sicher, dass du dem string voll vertrauen kannst.
würde ich ihn durch den repr schicken, müsste ich ja nicht unescapen, sondern das einfach lassen
.
nein, ich habe den string aus einer nicht vertrauenswürdigen quelle (tpcsocket).
Ich weiss zwar nicht was keppla vorhat, aber dafür kann es Gründe geben. Versuch mal einen Zeilenumbruch per `raw_input()` einzugeben, oder auch als Zeichenkette in einer Konfigurationsdatei. Oder exotischere Zeichen wie z.B. ein Null-Byte.
genau das ist der fall. ich habe ein zeilenbasiertes protokoll, das strings übertragen kann. wenn ich die strings nicht escape, könnte man keine zeilenumbrüche übertragen (die dienen als separatoren), also der klassische escape-fall.
gegen eval spricht, dass jemand dann eine zeile manipulieren kann, also statt
einfach
schicken, was mir keine freude bereiten würde.
und auch, wenn ich eval absichere (indem ich festlege, dass es keine builtins nutzen darf oder so), ist das imho eine schlechte lösung, weil hier nur ein winziger fehler eine riesige lücke aufreissen kann, wo eigentlich ein recht unproblematisches problem gelöst werden soll.