Hallo,
ich habe folgenden VBA Code, der Dateien im Netztwerklaufwerk ausliest.
Funktioniert auch prima, solange ich Leserechte habe.
Ohne Leserechte strürzt es ab.
Wie kann ich objFile vorher auf Leserechte prüfen?
Danke
1
Public Sub FileTest()
2
Dim path As String
3
Dim objFSO As Object
4
Dim objFolder As Object
5
Dim objFile As Object
6
7
path = "\\path.to\folder\"
8
9
Set objFSO = CreateObject("Scripting.FileSystemObject")
10
Set objFolder = objFSO.GetFolder(path)
11
12
For Each objFile In objFolder.Files
13
' Hier Absturz bei öffnen von "objFile.path", wenn keine Leserechte.
Thomas-jkfd schrieb:> Wie kann ich objFile vorher auf Leserechte prüfen?
Kannst du nicht.
Was du aber machen kannst: den Fehler fangen. Und dann entweder die
Sache insgesamt kontrolliert abbrechen oder mit dem nächsten Eintrag in
der Schleife erneut dein Glück versuchen. Was sinnvoller ist, hängt von
der Anwendung ab.
Wie? Siehe VBA-Hilfe zum Thema "on error"...
Jeder, aber auch absolut jeder Programmierer jeder, aber auch absolut
jeder Programmiersprache würde als erstes die jeweilige Sprachreferenz
auf Ansätze für Lösungsmöglichkeiten untersuchen...
Du bist wohl kein Programmierer...
René H. schrieb:> ExecQuery("Select * from Win32_Directory Where Name = '" &> strFolder & "'")
und schon hast du eine herrliche SQL-Injection, zumindest wenn du
strFolder nicht 100% kontrollieren kannst:
https://xkcd.com/327/
leo
René H. schrieb:> In VBA spielt das keine Rolle auf Einzelplatzrechnern.
Genau und darum kann man sich Worst-Praxis locker aneignen, bis man mal
auf ein anderes System kommt, oder man doch mehrere Benutzer hat, oder
...
leo
leo schrieb:> René H. schrieb:>> In VBA spielt das keine Rolle auf Einzelplatzrechnern.>> Genau und darum kann man sich Worst-Praxis locker aneignen, bis man mal> auf ein anderes System kommt, oder man doch mehrere Benutzer hat, oder> ...>> leo
Ich habe noch nie gehört, dass man SQL-Injection auch auf Festplatten
nutzen kann. M.W. hat SQL-Injection was mit Datenbanken und
Web-Anwendungen zu tun. Der TO will aber nur eine Datei auf einer
Festplatte öffnen.
René H. schrieb:> Auch VBA-"Profis" nutzen "ExecQuery"
darum haben auch Windows und speziell VBA-"Programmierer" so einen guten
Ruf, wenn es um das Hinterlassen solcher Exploits geht ;-)
leo
BTW:
Der TO möchte wissen ob man Ordnerrechte auslesen kann. Da finde ich es
nicht gut ihm Angst zu machen. Ob er VBA auf die Netzwerklaufwerke
loslassen darf muss oder sollte er ohnehin seinen Netzwerkadministrator
fragen, er wird ihm dann schon sagen ob es als gefährlich eingestuft und
deshalb untersagt werden muss.
René H. schrieb:> Der TO möchte wissen ob man Ordnerrechte auslesen kann. Da finde ich es> nicht gut ihm Angst zu machen
Da finde ich es nicht gut so unsichere Vorschlaege zu machen.
leo
leo schrieb:> René H. schrieb:>> Der TO möchte wissen ob man Ordnerrechte auslesen kann. Da finde ich es>> nicht gut ihm Angst zu machen>> Da finde ich es nicht gut so unsichere Vorschlaege zu machen.>> leo
Dann sage doch bitte wie man es besser macht. Nicht immer nur schimpfen,
sondern auch mal hilfreiche Vorschläge machen.
Ich sehe kein Problem mit SQL-Injection.
* Benutzereingaben gibt es nicht.
* Das Script läuft mit Userrechten, kann also nichts, was der User nicht
auch selbst könnte.
* Wie soll denn bitteschön ein Verzeichnis benannt werden um einen
Befehl einzuschleusen?
René H. schrieb:> Dann sage doch bitte wie man es besser macht.
Ich bin weder Windows- noch VBA-Programmierer. Ich habe nur auf einen
kraassen Sicherheitsmangel hingewiesen.
leo
leo schrieb:> Ich bin weder Windows- noch VBA-Programmierer.
Das macht nichts. Beispielcode ist immer gut, egal in welcher
Programmiersprache. Vielleicht kann ich mir davon was abschauen. Ich
kann zwar kein Englisch, aber "Code-Analyse" schon.
Hallo,
ich komme in den Order rein, und sehe auch alle dateien.
Aber ich kann sie nicht öffnen.
Es handelt sich um Dateien im Netzwerklaufwerk:
"\\path.to\folder\file.txt"
Netzwerklaufwerk funktioniert mit Renés Code leider nicht.
c-haters Vorschlag mit "On Error..." ist naheliegend und funktioniert
nicht.
Besonders ärgerlich ist, dass der Absturz erst nach Minuten und einigen
OLE Meldungen kommt.
Ich würde gerne erst auf Leserechte prüfen, und ggf. eine Meldung geben.
Ist das für die Arbeit, also dem Arbeitgeber? Dann soll der einen
"professionellen" Programmierer ranlassen. Oder der Arbeitgeber soll die
Rechte anders vergeben (lassen).
Mal davon abgesehen kann ich nicht nachvollziehen weshalb jemand Excel
benutzt um Textdateien zu öffnen. Bei CSV könnte ich es verstehen wenn
diese in Exceldateien eingelesen werden sollen, aber dann soll der
Arbeitgeber gefälligst dafür sorgen, dass der Arbeitnehmer seine
Aufgaben erfüllen kann.
Ja, ist für die Arbeit.
Wie kommst du auf Excel?
Natürlich kannst du das nicht nachvollziehen, da ich den Code auf ein
Minimalbeispiel heruntergebrochen habe um das Problem zu zeigen.
In wirklichkeit sind es auch keine Textdateien, ist aber auch
irrelevant.
Ich versuche gerade Hilfe von "professionellen" Programmierern zu
bekommen ;)
Wir ich auf Excel komme? VBA (Visual Basic for Applications) ist in
Microsoft Office integriert. Ich kenne kein anderes PC-Programm in dem
VBA integriert ist.
Der externe Programmierer kann aber nichts erreichen wenn Dir die
Ordnerberechtigungen fehlen.
VBA gibt es zumindest mal für:
Excel, Word, Powerpoint, Outlook, Visio, Access, Project, FrontPage,
AutoCAD, ArcGIS, ARIS, CATIA, SolidWorks, MindManager, Corel
Ich möchte keine Rechte haben, ich möchte sie nur abfragen.
Dann solltest Du mehr Angaben machen. Oder Dich an ein entsprechenden
Fachforum nachfragen. Für MSO gibt es einige (z.B.: ms-office-forum.net,
xlforum.herber.de, clever-excel-forum.de), in den genannten bin ich
selber tätig. Vielleicht hat ja doch jemand in den Fachforen eine
funktionierende und sichere Lösung.