Seite 1 von 4
Verfasst: Mittwoch 4. März 2009, 18:31
von helduel
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
Verfasst: Mittwoch 4. März 2009, 18:35
von mocca
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?
Verfasst: Mittwoch 4. März 2009, 18:40
von helduel
Ich zitiere mich mal selbst:
Schau dir mal [mod]shutil[/mod] an, da gibt's sowas.
Verfasst: Mittwoch 4. März 2009, 18:46
von mocca
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.
Verfasst: Mittwoch 4. März 2009, 18:55
von helduel
Für globbing ist das glob-Modul zuständig. Ansonsten könnstest du wahrscheinlich mittels os.walk sowas wie rmtree selbst implementieren.
Verfasst: Mittwoch 4. März 2009, 19:14
von mocca
hab einfach shutils in mein installationspacket eingebaut und dann rmtree daraus importiert.
darf man doch, oder? ist ja non-kommerziell.
Verfasst: Donnerstag 5. März 2009, 09:10
von lunar
Hyperion 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 ...
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

Verfasst: Donnerstag 5. März 2009, 10:11
von HWK
mocca hat geschrieben:...bleibt nur noch das unlesbarmachen der pfadangaben.
Base64 wurde Dir doch schon vorgeschlagen.
MfG
HWK
Verfasst: Donnerstag 5. März 2009, 12:16
von Leonidas
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

DIe exaktere Formulierung lautet:
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
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.
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.
Verfasst: Donnerstag 5. März 2009, 12:44
von mocca
könntet ihr mir nochmal was helfen?
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 "";
dann kriege ich aber folgenden fehler:
TypeError: coercing to Unicode: need string or buffer, list found
Verfasst: Donnerstag 5. März 2009, 12:51
von HWK
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
Verfasst: Donnerstag 5. März 2009, 12:52
von helduel
Wie kommst du darauf, dass die access-Funktion eine Liste akzeptiert? Sie kann nur mir einzelnen Pfaden umgehen.
Verfasst: Donnerstag 5. März 2009, 12:56
von HWK
@mocca: Die Verwendung von all und map hatte Dir doch bereits helduel gezeigt.
MfG
HWK
Verfasst: Donnerstag 5. März 2009, 13:18
von mocca
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
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!
Verfasst: Donnerstag 5. März 2009, 15:01
von helduel
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):
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']])
Es gäbe da auch noch die Möglichkeit das via partial zu machen.
Gruß,
Manuel
Verfasst: Donnerstag 5. März 2009, 16:18
von mocca
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.
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"
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?

Verfasst: Donnerstag 5. März 2009, 16:31
von jerch
versuchs nochmal ohne die doppelten Stringliterale:
Verfasst: Donnerstag 5. März 2009, 16:36
von mocca
danke schön!
ich dachte ich bräuchte die, da sonst für die pfadangabe die einfachen nicht mit encoded und decoded würden.
vielen dank.
werd mal versuchen das ganze nun fertig zu stellen und dann nach dem essen berichten

Verfasst: Donnerstag 5. März 2009, 17:25
von mocca
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?
Code: Alles auswählen
else: shutil.rmtree(ku11); os.remove(ku9); os.remove(ku10);
Verfasst: Donnerstag 5. März 2009, 18:33
von keppla
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.
indem du die doku zu den dir bereits bekannten funktionen liest.
gibt u.a.
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?