Hi,
ich bin Python-Neuling und habe ein Problem. Ich bekomme einen binären
Code als string-Eingangssignal. Fragt mich nicht warum...
Ich will diesen string ('01010101') als Binären Code in meinem Programm
verarbeiten. Hat jemend ne schnelle Lösung? Das Netz war jetzt nicht so
aufschlussreich.
Danke Euch,
Rike
Günter Lenz schrieb:> Falls noch Interesse daran besteht,> ich bin gerade am Üben mit Python. Die Umwandlung> geht ja bei Python einfacher als bei QBasic.
Die Lösung mit eval() ist garnicht gut! Damit reisst du
Sicherheitslücken in das Programm, größer als jedes Scheunentor. Der
String den du eval() übergibst wird nämlich wie normaler Pythoncode
interpretiert. Wenn jetzt jemand z.B. os.system("rm -rf /*") anstatt
einer Binärzahl eingibt, werden alle Dateien auf dem Computer gelöscht
auf die der User Zugriff hat.
justmy2cents hat die richtige Lösung schon gegeben:
Ich habe deinen Vorschlag
>>> int('01010101',2)
85
ausprobiert, es funktioniert, Danke.
Dann habe mein Programm noch mal getestet,
mit einem Sytembefehl statt einem Binärstring.
Es passiert auch nichts gefährliches, es kommt
nur eine Fehlermeldung. Auf eval bin ich gekommen,
weil es in QBasic soetwas ähnliches gibt,
aber nur mit Dezimalstrings.
rem QBasic
x=val"85"
-------------------------------------------------------
Mein Testlauf:
Das Programm addiert zwei Binaerzahlen
Binaerzahl? dir
Binaerzahl? dir
0bdir
0bdir
Traceback (most recent call last):
File "D:\PYTHON31\prog.py", line 36, in <module>
x=eval(a)
File "<string>", line 1
0bdir
^
SyntaxError: invalid token
D:\PYTHON31>
This can be used for safely evaluating strings containing Python values from
2
untrusted sources [...]
Davon auszugehen, das ein Benutzer schon nichts boeses Eingeben wird,
hat schon viele Sicherheitsluecken geschaffen.
Fuer alle Benutzereingaben gilt Grundsaetzlich, immer und ueberall,
voellig egal welche Sprache, OS, usw.:
All input is evil until proven otherwise!
War immer so, wird immer so sein.
Wenn sogar in der Sprach-Doku darauf hingewiesen wird, das die Funktion
unsicher ist, dann sollte man das beherzigen.
Yalu X. schrieb:
>Dann probier mal folgende Eingabe:>0 or exec("import os; os.system('<böses Shell-Kommando>')")
Habe ich ausprobiert, es funktioniert tatsächlich.
Für <böses Shell-Kommando> habe ich <dir> eingesetzt. Sehr interessant!
Ich habe mal ein wenig mit <or> gespielt, die Logik heißt also wenn
links
von <or> null ist wird die rechte Seite ausgefürt.
Aber ein Risiko besteht ja erst wenn jemand anderes das Programm
benutzt,
oder jemand aus der Ferne das Programm starten kann. Aber wenn jemand
aus der Ferne übers Internet auf meinen Computer Programme starten kann,
hat er ja sowiso schon die volle Kontrolle, da ist er auf dieses
Programm
auch nicht mehr angewiesen. Wenn so ein Programm auf einen Server
liegt das von vielen Leuten benutzt wird, ist das schon eine
Sicherheitslücke.
Mein Ziel, Python zu lernen, ist es die Programme für mich Lokal zu
nutzen, und irgendwann damit eine serielle Datenkommunikation zu einem
Mikrocontroller hinzubekommen.
Vielen Dank noch mal für die Hinweise.
Eine eigene Frage?
Dieser Thread ist über 11 Jahre alt.
Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.