Schau dir mal [mod]shutil[/mod] an, da gibt's sowas.
Über Sinn und Unsinn einer "Art Vorsichtsmaßnahme" will ich mal nicht philosophieren. Wenn du sowas undebingt haben willst, dann kodiere die Pfade mit Base64 oder verschlüssle gleich richtig. Wenn du die Pfade brauchst, dann dekodiere/entschlüssle einfach. Das wäre aber Security by Obscurity; wenn jemand an die Daten ran will, dann kommt er da auch dran.
Gruß,
Manuel
Pythonprog nur ausführbar machen, wenn Bedingung erfüllt?
ne, soll nur sicherstellen, dass es nur dann läuft, wenn eine bestimmte datei im system vorhanden ist. im prinzip so, als würde es prüfen, ob die lizenz vorhanden ist und damit man die lizenz nicht einfach nimmt und auf ein fremdsystem kopiert, soll man nicht gleich sehen, in welchem ordner die liegt.
das ganze ist kostenlos und ist nur eine vorsichtsmassnahme, weil es in einer definierten hard-/software umgebung laufen muss, weil sonst das ganze system crashen kann.
da die leute aber unbedacht machen was sie wollen, will ich da eine entsprechend schlichte routine einbauen, die guckt, dass die korrekte software drauf ist und die korrekte hardware (anhand der treiberdateien) und nur dann ausführbar ist.
selbst die, die nicht gnz so python bewandert sind kriegen es hin die korrekten dateien in ein fremdsystem zu kopieren, wenn die ganzen links in der .pyc in klarschrift sind. deshalb wärs cool, wenn das nicht der fall wäre.
p.s.: jemand ne lösung, wie ich nicht-leere ordner löschen kann? alternativ, wenn das garnicht geht, muss ich irgendwie in der syntax grad was verraffen, denn ein "os.remove('/blahblah/*')" funktioniert nicht, um alle dateien zu löschen. sprich in python is "*" nicht der gleiche platzhalter wie in shell/bash oder windows. welchen müsste ich da stattdessen nehmen?
das ganze ist kostenlos und ist nur eine vorsichtsmassnahme, weil es in einer definierten hard-/software umgebung laufen muss, weil sonst das ganze system crashen kann.
da die leute aber unbedacht machen was sie wollen, will ich da eine entsprechend schlichte routine einbauen, die guckt, dass die korrekte software drauf ist und die korrekte hardware (anhand der treiberdateien) und nur dann ausführbar ist.
selbst die, die nicht gnz so python bewandert sind kriegen es hin die korrekten dateien in ein fremdsystem zu kopieren, wenn die ganzen links in der .pyc in klarschrift sind. deshalb wärs cool, wenn das nicht der fall wäre.
p.s.: jemand ne lösung, wie ich nicht-leere ordner löschen kann? alternativ, wenn das garnicht geht, muss ich irgendwie in der syntax grad was verraffen, denn ein "os.remove('/blahblah/*')" funktioniert nicht, um alle dateien zu löschen. sprich in python is "*" nicht der gleiche platzhalter wie in shell/bash oder windows. welchen müsste ich da stattdessen nehmen?
sorry, stand auf dem schlauch. hab in dem link nach lösungen für mein sicherheitsproblem gesucht.
shutil hab ich jetzt mal importiert und wird halt einfach mit installiert. sehr schön. wieder ein problem weniger.
bleibt nur noch das unlesbarmachen der pfadangaben.
Nennt sich BOM (Byte-Order-Mark) und gehört eigentlich nicht an den Anfang von UTF-8-Dateien, was Windows-Editoren wie Notepad aber nicht daran hindert, sie doch zu schreibenHyperion hat geschrieben:Gabs da nicht mal die Macke einiger Windoof Editoren, bei utf-8 irgend welche komischen Header-Bytes avor zu setzen? Meine das hier schon mal gelesen zu haben ...
Base64 wurde Dir doch schon vorgeschlagen.mocca hat geschrieben:...bleibt nur noch das unlesbarmachen der pfadangaben.
Code: Alles auswählen
>>> 'TWVpbiBQZmFk'.decode('base64')
'Mein Pfad'
HWK
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
DIe exaktere Formulierung lautet:lunar hat geschrieben:Nennt sich BOM (Byte-Order-Mark) und gehört eigentlich nicht an den Anfang von UTF-8-Dateien, was Windows-Editoren wie Notepad aber nicht daran hindert, sie doch zu schreiben
D.h. also UTF-8-BOM ist irgendwie schon gültig, nur eben eine schlechte Idee. Python kann mit dem ``utf-8-sig``-Codec automatisch solche BOMs verwerfen.Wikipedia hat geschrieben:While UTF-8 does not have byte order issues, a BOM encoded in UTF-8 may nonetheless be encountered, though the Unicode standard does not recommend using it
Und Base64 hilft ja auch nichts, spätestens wenn man ``strace`` verwendet, weiß man genau auf welche Dateien zugegeriffen wird. So Verschleierungsversuche funktionieren eben nicht Trundle hat in diesem Thread aus einer "kompilierten" Datei den Salt ausgelesen und damit die Absicherung überwunden.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
könntet ihr mir nochmal was helfen?
ich wollte mehrere dateien überprüfen lassen statt nur einer mit diesem code
dann kriege ich aber folgenden fehler:
ich wollte mehrere dateien überprüfen lassen statt nur einer mit diesem code
Code: Alles auswählen
if os.access(['/usr/Plugins/Extensions/nel', '/usr/local/Dark', '/bin/mmfe', '/usr/lib/ma2/python/', '/usr/lib/ma2/python/Plugins', '/usr/AF', '/usr/f.ttf', '/var/etc/.en.cfg' ], os.F_OK): print ""; print "prüfung erfolgreich"; print "";
TypeError: coercing to Unicode: need string or buffer, list found
Dass Base64 u.ä. keine komplette Verschleierung ermöglichen, ist doch klar. Einen pfiffigen Hacker wird man sowieso nicht aufhalten können. Ich kann aber moccas Argumente nachvollziehen, dass er es Laien erschweren will, das Sytem zum Absturz zu bringen. Und dafür sollte Base64 doch reichen.
MfG
HWK
MfG
HWK
naja, ich "kam" nicht direkt drauf, dass es bei os.access geht, ich dachte nur, dass es vermutlich geht. wusste nur, dass man normalerweise so mehrere zu prüfende dateien angibt.
und sorry, ja, das mit all(map( hatte ich gesehen, aber nicht gewusst, dass das die korrekte vorgehensweise für meinen versuch gewesen wäre.
und man muss dann os.path.exists nehmen, richtig? denn wenn ich nehme kriege ich trotzdem die list-fehlermeldung
das funktioniert! hatte erst nen tippfehler in einer der files, deshalb hat er dann immer mit else weitergemacht.
peinlich. dreimal kontrolliert und doch was übersehen!
und sorry, ja, das mit all(map( hatte ich gesehen, aber nicht gewusst, dass das die korrekte vorgehensweise für meinen versuch gewesen wäre.
und man muss dann os.path.exists nehmen, richtig? denn wenn ich
Code: Alles auswählen
all(map(os.access(['deded', 'edwdewe'], F_OK))
Code: Alles auswählen
if all(map(os.path.exists, ['/usr/Plugins/Extensions/nel', '/usr/local/Dark', '/bin/mmfe', '/usr/lib/ma2/python/', '/usr/lib/ma2/python/Plugins', '/usr/AF', '/usr/f.ttf', '/var/etc/.en.cfg' ])): print ""; print "prüfung erfolgreich"; print "";
das funktioniert! hatte erst nen tippfehler in einer der files, deshalb hat er dann immer mit else weitergemacht.
peinlich. dreimal kontrolliert und doch was übersehen!
Moin,
ein Pfad ist ein Pfad - egal ob Ordner oder Datei. Einfach mal ausprobieren. Ist ja dank Python-Interpreter einfach möglich.
Zu deinem all/map/access-Teil: Das kann so nicht funktionieren. Du übergibst die Liste der access-Funktion und nicht der map-Funktion (die soll ja damit was anstellen). Außerdem hast du das Problem, dass du der access-Funktion einen weiteren Parameter übergeben willst/musst. Da musst du ein klein wenig anders vorgehen. Z.B. so (ungetestet):
Es gäbe da auch noch die Möglichkeit das via partial zu machen.
Gruß,
Manuel
ein Pfad ist ein Pfad - egal ob Ordner oder Datei. Einfach mal ausprobieren. Ist ja dank Python-Interpreter einfach möglich.
Zu deinem all/map/access-Teil: Das kann so nicht funktionieren. Du übergibst die Liste der access-Funktion und nicht der map-Funktion (die soll ja damit was anstellen). Außerdem hast du das Problem, dass du der access-Funktion einen weiteren Parameter übergeben willst/musst. Da musst du ein klein wenig anders vorgehen. Z.B. so (ungetestet):
Code: Alles auswählen
all(map(lambda p: os.access(p, os.F_OK), ['deded', 'edwdewe']))
# oder aber
all([os.access(path, os.F_OK) for path in ['deded', 'edwdewe']])
Gruß,
Manuel
also, ich habe es jetzt soweit, dass die kontrolle mehrerer dateien auf existenz funktioniert.
DANKE!!!!
nun fehlt noch der base64 teil.
das encoden und decoden ist kein problem. aber dies nun korrekt an den os.path.exist zu übergeben scheitert.
irgendwas stimmt auch hier nicht, weil jedesmal else ausgeführt wird
hab auch schon versucht nur einen pfad zu prüfen mit
und auch mit aber ging beides auch nicht.
ziel so nah und doch so fern.
wo isn jetzt schon wieder mein fehler?
DANKE!!!!
nun fehlt noch der base64 teil.
das encoden und decoden ist kein problem. aber dies nun korrekt an den os.path.exist zu übergeben scheitert.
Code: Alles auswählen
encoded = base64.b64encode("'/usr/lib/nel'", altchars=None)
ku1 = base64.b64decode(encoded, altchars=None)
print ku1
encoded2 = base64.b64encode("'/usr/lib/module'", altchars=None)
ku2 = base64.b64decode(encoded2, altchars=None)
print ku2
if all(map(os.path.exists, [ku1, ku2])): print "vorhanden"
hab auch schon versucht nur einen pfad zu prüfen mit
Code: Alles auswählen
if all(map(os.path.exists, [ku1])): print "vorhanden"
Code: Alles auswählen
if all(map(os.path.exists, ku1)): print "vorhanden"
ziel so nah und doch so fern.
wo isn jetzt schon wieder mein fehler?
versuchs nochmal ohne die doppelten Stringliterale:
Code: Alles auswählen
"'/usr/lib/nel'" --> '/usr/lib/nel'
so, allerletzte frage, dann ists fertig.
in meinem else ist es so, dass wenn eine der zu löschenden dateien fehlt, der rest nicht gelöscht wird, sprich der vorgang abgebrochen wird.
wie kann ich das am einfachsten verhinden bzw. dafür sorgen, dass das ignoriert und der nächste befehl ausgeführt wird?
in meinem else ist es so, dass wenn eine der zu löschenden dateien fehlt, der rest nicht gelöscht wird, sprich der vorgang abgebrochen wird.
wie kann ich das am einfachsten verhinden bzw. dafür sorgen, dass das ignoriert und der nächste befehl ausgeführt wird?
Code: Alles auswählen
else: shutil.rmtree(ku11); os.remove(ku9); os.remove(ku10);
indem du die doku zu den dir bereits bekannten funktionen liest.mocca hat geschrieben:in meinem else ist es so, dass wenn eine der zu löschenden dateien fehlt, der rest nicht gelöscht wird, sprich der vorgang abgebrochen wird.
Code: Alles auswählen
help("shutil.rmtree")
rmtree(path, ignore_errors=False, onerror=None)
zurück, ignore_errors fällt da ins Auge.
edit: die semicola sind hoffentlich nur im post un nicht in deinem code?