Lukasz hat gesagt.:
Wie der Titel des Themas predigt „Sicherheit in PHP“ kann es nie und nimmer geben. Und das wird es auch nie geben! Und man kann es auch nicht durch Aufmerksamkeit oder Achtsamkeit verhindern. Man kann es nur beschränken!
Ja, aber obwohl der Airbag keinen 100% igen Schutz vor dem Verkehrstot bietet, ist er dennoch für mich ein Kaufargument bei einem Auto.
Der Hase liegt ganz wo anders begraben. Und das weis jeder für sich, der nur 3 Zeilen Code und sich schon mal ein Virus eingefangen hat. Man schreibt dem unerfahrenen Volk vor, sein PC ständig upzudaten, Firewall und Antivirus zu betreiben, E-Mailanhänge bestens nicht zu öffnen und noch vieles mehr, um Sicherheit zu erlangen, die es nie gibt und auch nie geben wird.
Sicherheit ist immer dem Zustand der kompletten Sicherheit so nah wie möglich zu kommen.
Ich soll also 5 Jahre Betriebsysteme studieren, PHP im Modul selbst studieren, weis sonst noch was, um sicher 3 Zeilen Code zu tippen? Schöne Welt aber so ist sie. Und trotzdem gibt es Tools die Passwörter angeblich sicher aufbewahren können, sie jedoch wieder ausgeben können. Das Volk wird wieder vergackeiert.
Ja es wird viel Geld mit angeblicher Sicherheit gemacht. Im Grunde aber ist die IT-Sicherheit nicht die Summe an Tools sondern ein sicherheitsbewusster Umgang mit
dem Rechner, an die Situation angepasst.
Jedes Passwort hat auf einem PC nichts verloren. Denn alles was wieder ausgegeben wird, kann auch ausgenutzt werden.
Das stimmt so nicht. Es gibt unkritische und kritische Passwörter. Ich habe z.b ein sehr einfaches Standardpasswort das keinen Regeln wie [Gross und Kleinschriebung verschieden- nicht zusammenhängende Wörter usw] entspricht.
Dieses Passwort nutze ich wenn ich mich auf Seite bzw Forum XYZ anmelde.
Genauso nutze ich dieses Passwort auf meinen lokalen Datenbanken.
Andere Passwörter die sehr komplex sind in der Form XaG4k2z9haff habe ich dafür für kritische Dinge.
Nur wie soll das funktionieren, wenn die Verbindung zu Mysql Datenbank schon eins fordert? Und genau hier fängt die Unsicherheit an.
Es spricht nichts dagegen wenn du ein Passwort auf der Platte speicherst.
Denke einfach daran das dein MySQL Passwort zu einem MySQL User gehört der nur die nötigsten Rechte hat. Das Passwort nicht von aussen aufrufbar ist. Mann eben kein "chmod 777 config.php" aus Faulheit / Unwissen absetzt.
Sicherheit ist die Summe von Wissen / Verantwortungsvolles Verhalten.
Nur man schiebt sie immer auf das Volk, das eigentlich nur das verdaut, wofür sie unschuldig getitelt werden. Wer kann was dafür, dass PHP in der Fehlermeldung beispielsweise bei file_get_contents() und nicht Erreichbarkeit auch die URL mit ggf. per GET übergebenen Passwort ausgibt, nur weil der User ein @ nicht vor setzt.
@ sollte sowieso nicht eingesetzt werden. Ein Fehler ist ein Fehler und sollte nicht einfach ignoriert werden. PHP kann Exceptions abfangen, wenn mann denn schon weiss
das hier ein Fehler passieren kann sollte man die Möglichkeit auch berücksichtigen und nicht einfach unterdrücken.
Auf einem Produktivsystem sollte: display-errors auf 0 gesetzt sein.
http://de3.php.net/manual/en/ref.errorfunc.php#ini.display-errors
Dann gibt es auch keine Probleme mit Fehlerbehandlung übersehen.
Würde die Fehlermeldung nicht ohne Get Parameter oder gar URL ausreichen? Und wieder wird das kleine Volk für die Fehler der schlauen verurteilt.
Nein hier ist das kleine Volk schuldig wenn die Konfiguration eines Produktivsystems Fehlermeldungen darstellt. Denn das "kleine Volk" kann entweder unter diesem Flag (display-errors) 0 setzen oder seinem Hoster auf das Dach steigen das die das machen.
Die Lücken die genutzt wurden, sind von unseren Fachleuten nicht bedacht worden. Und selbst die können diese nicht bedenken.
was gefällt dir an display-errors nicht?
Also ich lehne mich nicht auf. Sicherheit ist dennoch überwichtig. Aber die Beiträge klingen einfach nach „Faulheit“ der User. Ich progge auch schon mehrere Jahre, und bin mir dessen Problem bewusst. Nur die schuldigen sitzen meist auf der anderen Seite mit zig Jahren Erfahrung und urteilen über die unerfahrenen, und schieben einfach ihre eigenen Fehler weiter. Informiert wird dann wirklich nur in englisch zu 90% und in für Anfänger unverständlicher Fachsprache.
Software entwicklung ist ein Fachgebiet. Ähnlich wie Ingeneurswesen. Ich werde kein Haus entwerfen und dann bauen weil ich davon keine Ahnung habe.
Will ich das ändern, dann muss ich etwas dafür tun. Genauso wenig ist Programmieren kein Gebiet das man ohne sich ständig zu informieren meistern kann.
Die Syntax einer Sprache zu kennen ist nicht die halbe Miete beim Wissen, sondern maximal 5% dessen was man wissen sollte.
Wie soll der Peter aus der Auguststrasse nun sein System schützen? – Er wollte nur ein Gästebuch auf seiner Webseite haben, und hat jetzt ein Verfahren am Hals, wofür er nichts kann. Er hat doch alles so getan wie es in der Installationsanleitung steht, fragt er sich hinterher. Und der progger des Gästebuchs behauptet, er habe sein GB nicht upgedatet, und sei deshalb an allem selbst schuld und untauglich.
Peter aus der Auguststrasse hätte eine Firma beauftragen sollen wenn er das Wissen nicht hat. Wenn ich im Haus Kabel verlegen will, dann lass ich einen Elektriker kommen oder einen Freund der Ahnung davon hat. Der Grund ist einfach: ich habe nicht den blassesten Schimmer.
Und ich wette mit dir er kommt (aufgrund der Menge an IT Studenten) billiger weg als wenn er einen Elektriker zahlen müsste.
Will er es selber machen, so muss er sich umfassend informieren und tips auch beherzigen. "Works for me!" reicht nicht aus.
Auch aus diesen doch wenn auch sehr hilfreichen Thema lese ich heraus, dass man schon studieren und zig Stunden Aufwand für eine Hobby HP aufbringen sollte (übertrieben gemeint) bevor man überhaupt eine Zeile Code eingeben kann
Zig Stunden Aufwand sollte mann wirklich aufbringen bevor man seine Hobby HP programmiert. Das ist vollkommen richtig.
Genauso wie ich zig Stunden Aufwand hätte würde ich im Haus die ganze Verkabelung selber machen. Ich müsste mich genauso darum kümmern das ich mir das Wissen um Sicherheit aneigne das Kinder die zu besuch sind nicht beim langen in eine Ecke einen Schlag bekommen. Passiert das weil ich keine Ahnung von Elektrik hatte, und ein Kind deshalb stirbt, nur weil ich nicht bereit war es machen zu lassen, dann habe ich zurecht ein Verfahren am Hals.
. Und auf Xampp steht so ungefähr „Werbung: hol dir das Produkt – So installierst du es“ fertig. Die Readme ist dann oft in englisch und für einen normalen (oder gebildeten Menschen in eine andere Richtung) überhaupt nicht zu raffen.
Es gibt da draussen fantastische Bücher in Deutsch! Es gibt sogar einige kostenlose Bücher in deutsch.
Genügend Material um sich das Wissen anzueignen. Mann benötigt kein Diplom um saubere Software zu schreiben sondern nur den Antrieb und die Zeit sich das Wissen anzueignen.
Mir und allen die erfahren sind, ging es am Anfang nicht anders. Ein Programmierer macht eben die Erfahrung reich, nicht was er kann oder meint zu können.
Das ist richtig. Erfahrung ist der beste Weg um stabile und sichere Software zu programmieren. Aber man kann sich die Erfahrung im Bereich Sicherheit erst dann aneignen wenn man sie von Anfang an lernt.
Das bedeutet lernt man gerade wie man in PHP Dateien öffnet und ausliest sollte man genau in dem Moment auch lernen wie man damit umgeht wenn Dateien nicht gefunden werden, Dateien Korrupt sind usw.
Das bedeutet Programmieren lernen heisst nicht nur zu lernen wie welche Funktionen aufgerufen werden, sondern wie der Code Strukturiert wird das jenes Programm auch mit erwartbaren Fehler umgehen kann.
Leider bietet PHP hier @ an, was für viele Progammieranfänger ein kurzes merkbares Statement ist um sich nicht mehr damit beschäftigen zu müssen.
Über Windows wird in Linux Kreisen gelästert, aber Linux ist auch nicht sicher. Und auch der Firefox wird sicher geredet, wo auch schon unzählig Lücken gab. Genau das wird hier mittels Propaganda verlautet, und genau deshalb ist sich kein Anfänger bewusst, wie er nachzudenken hat.
Linux ist nicht per default sicher. Aber Sicherheit ist kein Zustand sondern die Summe vieler Faktoren. Ich habe erst letzte Woche versucht auf meinem Windows Rechner MS Flugsimulator 2004 zu installieren. Ich habe die Installation abgebrochen als die Meldung kam das ich jene Software nur mit einem Administrator Accaunt starten kann.
Mann wird keine RedHat Software finden die nur mit root Accaunt gestartet werden kann und um das es sich um etwas ähnlich wie ein Spiel handelt.
Es findet zwar zum Glück ein umdenken bei MS statt (aufgrund der massiven negativen Nachrichten über Windows Würmer usw) aber MS hat das Problem das sie ein Betriebssystem welches vom Konzept her unsicher ist auf Sicherheit trimmen müssen.
Bei Windows kommt vieles in die Quere:
- Homogene Softwarelandschaft (IE, OE)
- Ursprung in einem System ohne Userverwaltung (Dos, win 3.11, win95..)
- Vorrangiges Einsatzgebiet Spiele & Multimedia / Desktop
- Den Anspruch komplexe Dinge einfach zu machen
- Riesige Verbreitung
Linux hat es einfacher sicher zu sein. Seine Wurzeln liegen bei UNIX, einem Server Betriebssystem welches Sicherheit seid Jahrzehnten propagiert als es bei CM/P bzw DOS nichtmal eine Userverwaltung und Dateiberechtigungen gab.
aber das ist eigentlich ein anderes Thema ...
Viel mehr sollte man die Wahrheit weitergeben. Dein Mysql PW ist der Datei könnte jederzeit ausgelesen werden. Dann würde der unerfahrene ein Thema aufmachen „wie mach ich es sicher“?
ich mach dir ein Vorschlag. Wenn du im PHP Forum ein Thread siehst in dem nach XY gefragt wird, und sich unsicherer Code zeigt. Dann mach ihn nicht nur auf die Lösung XY aufmerksam sondern stubse seine Nase auch auf die Schwachstelle.
Mein Tipp an die Anfänger: Es ist überhaupt nichts sicher! Deshalb schaut danach, es so sicher wie nur möglich zu machen. ein unset() nach der Verbindung der DB besipielweise.... Habt ständig Angst um eure Passwörter und Daten, die wenn sie ein anderer lesen könnte euch Schaden zufügen!
Wie ich schon im anderen Post sagte: Paranoia schadet nicht
Viel eher erkläre ich alle Anfängern, Sicherheit ist ein Wettlauf der nie aufhört. Je schneller du mitläufst desto sicherer aber keinesfalls Sicher ist man. Das war also für keinen so ausgelegt, dass er sich nicht bilden sollte. Bildung ist daher sehr wichtig. Aber kein Anfänger soll sich frustriert sehen. Die Fehler macht jeder mal. Und aus den eigenen Fehlern lernt man am besten. Aber die Hauptschuldigen in der ganzen Sachen sind zu 90% die gebildeten, die sich ihre eigenen Fehler nicht gestehen können! Und da zähle ich mich auch dazu!
Die Hauptschuldigen sind jene die kein Interresse an Sicherheit haben. Ganz gleich ob mann sie zu den "Gebildeten" zählen kann oder nicht.
Wer also den Weg erkennt, wie der Hase wirklich läuft, der Vertraut nicht nur auf den nächsten, sondern macht auch endlich sein eigenen Kopf dafür auf. So wie das von Erfahrenären dargelegt wird, oder ausgeschildert steht, würde es eigentlich nur noch mehr zu Sicherheitsproblemen führen. Oder das Volk und damit die Bildung demotivieren.
Sorry du argumentierst konfus. Spezifiere denn doch mal wen du mit "Erfahrenären" meinst in diesem Zusammenhang genau meinst.
Ein Link wäre hier hilfreich.
Mit meiner stolzen englischen Readme tue ich keinem was gut. Und das muss ich mir als Erfahrener eingestehen.
Wer kein Englisch lesen kann der sollte nicht programmieren.
Nur weil ich es mittlerweile verstehe, muss ein anderer dies noch lange nicht, und scheitert, obwohl er wirklich für ihn alles Mögliche getan hat, und ernstens Versucht hat alles richtig zu machen. Genau das will ich ansprechen. Wir sind uns zu stolz, deshalb herrsch Unsicherheit. Nur so vererben wir nicht Wissen sondern Ahnungslosigkeit und die wirklich guten Nachfolger bleiben aus. Und alles wir unsicherer wie es nicht sein sollte.
Aber nicht aufgrund englischer Doku. Wenn ich eine Doku eines Systems nicht verstehe weil sie Fachwissen vorraussetzt das ich nicht habe, dann habe ich die Finger von dem System zu lassen.
Anders ist natürlich wenn die Doku einfach schlecht ist, aber auch dann lass ich die Finger von dem System.
Eine Doku die sämmtliche Fachbegriffe versucht zu vermeiden und umschreibt ist für mich nicht lesbar. Denn gerade Fachbegriffe machen eine Doku greifbar und verständlich.
Wenn eine Doku mir erklärt das ich an die Konfiguration über das Singleton Configuration rankomme dann ist das für mich auf den 1. Blick verständlich. Beschreibt die Doku aber über 10 Zeilen was ein Singleton ist und weshalb ich nicht einfach die Klasse instanzieren kann dann verliere ich den Blick für das wesentliche und die Doku ist schlecht.