it-swarm.com.de

Wie gehe ich mit diesem grundlegenden Problem mit dem Rat um: "Vertraue nicht obskuren PHP Bibliotheken, die niemand benutzt!"?

Häufig würde ich in praktisch jedem Fall sagen, dass es nur eine PHP Bibliothek für ein bestimmtes Problem gibt.) Ich zähle keine veralteten, verlassenen, Müll.)

Daher ist es für mich nie eine "Wahl", es zu benutzen. Ich habe, um es entweder zu benutzen oder nichts.

Aus diesem einfachen Grund ist der klingende Sicherheitshinweis, "keine obskuren Bibliotheken zu verwenden, die nicht von vielen Menschen und großen Unternehmen beworben oder verwendet werden", selten anwendbar, da es einfach keine Alternativen gibt, aus denen man auswählen kann!

Und dies ist für [~ # ~] php [~ # ~] - eines der beliebtesten/größten/Die am häufigsten verwendeten aktuellen Programmiersprachen auf dem Planeten. Stellen Sie sich vor, ich würde eine weitaus weniger beliebte Sprache verwenden. Ich würde nie eine Bibliothek finden, um etwas zu tun!

Es scheint, dass dieser Rat nur theoretisch funktioniert. In Wirklichkeit gibt es kaum eine Wahl zwischen Bibliotheken und sogar Sprachen, es sei denn, Sie werden alles von Grund auf selbst erledigen. (Oder möglicherweise, wenn Sie Geld bezahlen können, was ich nicht kann, und daher habe ich noch nie über potenziell existierende bezahlte Alternativen nachgedacht.)

Der Grund, warum ich diese Frage stelle, ist, dass ich sie immer als einen der wichtigsten Tipps gebe, wie man sicher bleibt und keine Malware durch kompromittierte/böse PHP -Bibliotheken) erhält eine Sache zur Auswahl, zum Beispiel "MailMimeParser", die fast immer der Fall zu sein scheint (bei "Alternativen" mit großen Show-Stoppern wie tot zu sein oder einfach nicht wie angekündigt zu arbeiten), was kann ich sonst noch tun?

Sie sagen, dass Sie keine Wahl haben, aber das stimmt nicht. Sie können den gesamten Code, den Sie benötigen, selbst schreiben. Oder Sie können einen vertrauenswürdigen Fachmann bezahlen, um den Code für Sie zu schreiben. Sie können auch eine Sicherheitsfirma bezahlen, um den Code zu prüfen, bevor Sie ihn verwenden. Oder Sie können das Risiko akzeptieren und andere Sicherheitskontrollen implementieren, um die Risiken zu minimieren. Wenn Sie beispielsweise befürchten, dass Code für die SQL-Injection anfällig ist, können Sie eine WAF (Web Application Firewall) davor einrichten.

Sicherheit hat Kosten: Zeit, Ressourcen, Fachwissen, Geld. Es gibt kein kostenloses Mittagessen. Wenn Sie es sich nicht leisten können, müssen Sie entweder das Problem vermeiden (Ihr Projekt überdenken) oder es delegieren (jemand anderes wird sich darum kümmern) oder es abmildern (zum Beispiel mit eingehender Verteidigung) oder einfach das akzeptieren Risiko, dass Sie gehackt werden.

Persönlich würde ich in Ihrem Fall, wenn Sie mit Code arbeiten müssen, der nicht weit verbreitet ist, wenn die Bibliothek nicht zu groß ist, versuchen, den Code zu lesen, zumindest um zu überprüfen, ob es einen "Codegeruch" gibt. Selbst wenn Sie nicht die gesamte Logik überprüfen, ist es einfach zu überprüfen, ob genügend Kommentare vorhanden sind, ob sie sinnvoll sind, ob der Code sauber und verständlich ist, ob bestimmte Funktionen gemäß den Best Practices verwendet werden, ob die überprüft wird Eingabedaten usw. Das Risiko, dass Code nur von wenigen Personen verwendet und nur von wenigen Entwicklern verwaltet wird, besteht auch darin, dass er möglicherweise nicht mehr gewartet wird oder die Wartung ohnehin zu langsam ist, sodass Sie dies am Ende des Tages möglicherweise tun Sie müssen den Code trotzdem lesen und verstehen, um Ihre Anwendung zu reparieren. Wenn möglich, würde ich auch versuchen, etwas zur Tiefenverteidigung zu implementieren, obwohl die korrekte Konfiguration einer WAF möglicherweise nicht einfach ist, wenn Sie wirklich möchten, dass sie effektiv ist und Vermeiden Sie gleichzeitig, Ihre Anwendung wegen falsch positiver Ergebnisse zu beschädigen.

53
reed

Ich werde zuerst den allgemeinen Teil Ihrer Frage und dann den spezifischen Teil PHP) ansprechen.

  1. Vertraue nicht obskuren PHP Bibliotheken, die niemand benutzt!

    Es ist nur die übliche Gewinn-/Risikofrage. Wenn das Risiko gering ist, können Sie alles tun und obskure (oder sogar kaputte) Bibliotheken verwenden. Das bedeutet, dass weder die Plattform noch das Ergebnis der endgültigen Anwendung geschäftskritisch sind. Wenn es zu einem bestimmten Zeitpunkt fehlschlägt, müssen Sie nur einen Fix erstellen oder eine Problemumgehung finden.

    Wenn Sie die Bibliothek in eine Mehrwertanwendung aufnehmen möchten, benötigen Sie eine Bewertung des Risikos, dass sich die Bibliothek nicht genau wie erwartet verhält. Der gebräuchlichste Weg ist (wie bei Stack Exchange) der Ruf . Wenn bekannt ist, dass die Bibliothek ausgiebig getestet wurde und weiterhin gewartet wird, ist das Risiko, in einen nicht getesteten Eckfall zu fallen, gering, und Sie können hoffen, dass das Problem behoben wird, wenn Sie es bemerken. Wenn es nur gelegentlich gewartet wird und nur wenige Benutzer hat, könnten Sie (oder Ihre Benutzer) später in einen solchen Eckfall fallen und keinen besseren Weg haben, als zu dokumentieren, dass Ihre Anwendung dies einfach nicht kann.

    Wenn der Ruf nicht gut etabliert ist, können Sie versuchen, ein wenig in den Code zu graben. Wenn es gut strukturiert und gut dokumentiert aussieht und Tests enthält, können Sie zumindest darauf vertrauen, dass die Best-Practice-Regeln eingehalten wurden. Nebenbei zeigen Tests, auf welchen Anwendungsfall sich die Bibliothek konzentriert.

    Wenn die Bibliothek wirklich wie eine obskure aussieht und Sie sie verwenden möchten, müssen Sie nicht nur Ihren eigenen Code testen, sondern auch diesen Die Bibliothek verhält sich für alle Anwendungsfälle, die Ihre Anwendung akzeptieren soll, wie erwartet. Weil du ihm nicht blind vertrauen kannst. Aber wenn Sie das ernst nehmen, wird es einige Zeit dauern.

  2. PHP vs. weniger verwendete Sprachen

    PHP ist wahrscheinlich die am häufigsten verwendete Sprache für nicht professionelle Programmierer. Das heißt, wenn Sie etwas brauchen, hat es bereits jemand anderes produziert. Sie können sich jedoch der Qualität nicht sicher sein. Java wird außerhalb professioneller Produkte weit weniger verwendet. Viele Bibliotheken werden jedoch von großen und bekannten Organisationen erstellt und stark getestet. Wenn ich etwas aus den Spring-Projekten bekomme, vertraue ich darauf, dass es am besten gefolgt ist Übungsregeln und wurden ausgiebig getestet.

    Nur meine Meinung, aber es ist einer der Gründe, warum ich nicht gerne PHP Code: Es gibt viele PHP Code herum, einige davon sehr nett) Qualität, aber das Risiko, einen Code von schlechter Qualität zu erhalten, ist hoch.

35
Serge Ballesta

Der Rat ist im Grunde eine Abbildung der Vertrauensprinzipien, die man in der "realen" Welt hat, in die Welt der Softwareentwicklung:

  • Vertraue nicht blind jemandem, sondern überprüfe den Ruf. Es ist besser, jemandem zu vertrauen, dem auch schon eine Weile von vielen anderen vertraut wird, da es in diesem Fall weniger wahrscheinlich ist, dass das Vertrauen missbraucht wird. Für die Softwareentwicklung bedeutet dies, Bibliotheken zu verwenden, die auch von anderen verwendet werden und einen guten Ruf haben.
  • Und wenn Sie mit jemandem zu tun haben, der noch keinen guten Ruf hat, seien Sie sehr vorsichtig. Im Falle einer Softwareentwicklung bedeutet dies, zu überprüfen, ob der Code tatsächlich das tut, was er tun soll, und nichts weiter (d. H. Keine Hintertüren, keine kritischen Fehler).

Wenn Sie diese einfachen Regeln der realen Welt in der Softwareentwicklung nicht befolgen, können Sie genauso verbrannt werden wie im realen Leben: Jemand könnte das (unbegründete) Vertrauen, das Sie haben, missbrauchen, was beispielsweise zu einer Hintertür oder einem kritischen Fehler führen kann in Ihrer Software. Und dies könnte wiederum Ihren eigenen Ruf schädigen.

Sicher, es ist immer noch möglich, dass jemand einen guten Ruf hat und das Vertrauen immer noch missbraucht. Und es gibt genug Beispiele, wo dies getan wird. Aber es ist viel weniger wahrscheinlich im Vergleich zu jemandem ohne Ruf, da es viele Anstrengungen erfordert, um überhaupt einen guten Ruf aufzubauen. Im Vergleich dazu kann ein guter Ruf bei Missbrauch leicht und schnell verloren gehen, sodass die meisten nicht versuchen, ihren guten Ruf zu missbrauchen.

12
Steffen Ullrich

Sie müssen nicht PHP für Ihre Website verwenden)

Es gibt bessere Alternativen. Schauen Sie sich ocsigen an, das von Informatikern entwickelt wurde, um etwas zu verstehen über Cybersicherheit und in haxe . Natürlich werden Sie Monate damit verbringen, es zu lernen, und wenn Sie sich für die Verwendung von ocsigen entscheiden, gehen Sie ein kommerzielles Risiko ein (die Leute und Unternehmen, die es warten, könnten verschwinden, so genannter Busfaktor ). Aber ich persönlich kenne den Hauptarchitekten und Designer von Ocsigen, und ich kann Ihnen versichern, dass er einiges über Cybersicherheit versteht (die Hälfte seiner Doktorarbeit befasst sich mit diesem Thema).

Ich muss es entweder benutzen oder nichts.

Nein, das ist falsch. Sie müssen kein PHP verwenden. Lesen Sie beispielsweise dieses Blog über das Erstellen Ihrer Website in C++ und dieses über Webtechnologien in Common LISP. Sie können auch andere Ansätze verwenden (z. B. FastCGI Server, die in C++ oder Go geschrieben sind, Ihren speziellen HTTP-Server, der in C++ geschrieben ist, z. B. mit libonion oder mit pistache oder mit CppCMS oder Wt , in Go , in Common LISP mit SBCL). Mit Rocket.rs können Sie Webanwendungen in Rust (und die Rust Community kümmert sich) a schreiben viel über Cybersicherheit). Sie können dynamische Webserver in SML programmieren. Und viele Webserver ( Apache , Lighttpd ,. ..) kann an Ihre Bedürfnisse angepasst oder angepasst werden (z. B. mit Ihren Plugins , die Sie für sie geschrieben haben), ohne ein einziges Bit von PHP).

Meine voreingenommene Meinung ist, dass Web-Frameworks über Common LISP oder C++ oder Go oder Rust normalerweise von ausgebildeten Informatikern entwickelt werden, die von Beruf die Cybersicherheit verstehen und sich darum kümmern. PHP = wurde mit einer völlig anderen Denkweise entwickelt: Dynamische Websites schnell codieren zu können. Zu der Zeit, als PHP entworfen wurde (1995), war Cybersicherheit kein großes Problem In der Praxis war es jedoch unerlässlich, in wenigen Tagen eine gut aussehende dynamische Website erstellen zu können.

Aber was auch immer Sie verwenden, es hat einige Kosten. Lesen Sie über externe Effekte . Lesen Sie J.Tirole 's akademische Arbeit über sie (er ist ein Nobelpreis für Wirtschaftswissenschaften; seine Arbeit über einfache Wirtschaft von Open Source ist lesenswert und die am häufigsten zitierte dieses Thema). Auch wenn es freie Software ist (da es bei freier Software um Freiheit geht, nicht um Budget). Vergessen Sie zumindest nicht die Kosten Ihrer Bemühungen, es zu lernen und seine Cybersicherheitsaspekte zu bewerten.

Wenn Sie Open Source Bibliotheken verwenden, haben diese immer noch Kosten für Sie: Sie müssen sie lernen, um sie zu bewerten. Sie werden normalerweise OHNE GARANTIE angegeben. Sie können jedoch Unterstützung für diese Bibliotheken erwerben.

Wenn Sie proprietäre Bibliotheken oder Softwarekomponenten verwenden, sind Sie an deren EULA gebunden.

Sicherheit ist immer eine Frage von Kompromissen.

Sie können Ihren Sicherheitsgurt während der Fahrt nicht anlegen, gehen dann aber ein zusätzliches Risiko ein und zahlen dafür (z. B. weil Ihre Versicherung Sie nicht abdeckt, wenn etwas schief geht, oder weil Sie eine Geldstrafe erhalten). Dies gilt auch für die Auswahl der Software.

Beachten Sie jedoch Reissatz . In gewisser Weise zeigt es, dass eine vollständige Cybersicherheit unmöglich ist. Aber auch das Leben ist eine riskante Aktivität. (Sie oder ich könnten in ein paar Stunden einen Herzinfarkt bekommen).

Ihr Problem ist nicht technisch, sondern sozial. Wenn Sie Open Source-Software verwenden, können Sie jede Quellcodezeile studieren und sich davon überzeugen (oder nicht), dass die Sicherheit gut genug ist. Das kann natürlich Jahrzehnte dauern (oder Jahrhunderte: Eine gesamte Linux-Distribution besteht jetzt aus 20 Milliarden Zeilen Quellcode). Sie haben jedoch die Wahl (und Sie können die Sicherheitsbewertung jeder von Ihnen verwendeten Softwarekomponente delegieren).

Ich denke du bist schon dem Rat folgend! Du sagst:

Ich zähle keine veralteten, verlassenen, Müll.

Mit welcher Maßnahme entscheiden Sie also, ob etwas "veraltet, verlassen, Müll" ist? Sehr wenige Pakete werden auf Websites wie packagist.org tatsächlich als "aufgegeben" markiert, und "Papierkorb" ist eindeutig eine subjektive Beurteilung. Ich vermute, dass Ihr tatsächlicher Prozess ungefähr so ​​aussieht:

  1. Suchen Sie nach relevant aussehenden Paketen
  2. Überprüfen Sie, ob sie zu Ihrem Anwendungsfall passen
  3. Überprüfen Sie, ob sie von angemessener Qualität sind

Die Tatsache, dass Sie häufig eine einzige Option am Ende dieses Prozesses haben, unterscheidet sich stark von der Tatsache, dass es nur eine Option am Start dieses Prozesses gibt.

Es ist auch erwähnenswert, dass, wenn es is eine qualitativ hochwertige Bibliothek zum Lösen eines bestimmten Auftrags gibt, es oft keinen Anreiz für jemanden gibt, einen neuen zu schreiben. Auch dies widerspricht nicht dem Rat, angesehene Bibliotheken zu verwenden, sondern verstärkt ihn. Wenn viele Leute dieselbe Implementierung verwenden, ist es wahrscheinlicher, dass einige von ihnen Fehler entdecken oder für Audits bezahlen. Dies ist im Grunde eine Wiederholung von "Linus 'Gesetz":

bei genügend Augäpfeln sind alle Käfer flach

Der einzige Fall, in dem ich sehe, dass das Problem tatsächlich auftritt, ist, dass es no anständige Bibliotheken für einen Job gibt, da dies ein ausreichend ungewöhnlicher Anwendungsfall ist, den niemand geschrieben hat. In dieser Situation liegt es an Ihnen, die Bibliothek zu schreiben (oder dafür zu bezahlen, dass sie geschrieben wird) und an Ihnen, sie sicher zu machen (oder dafür zu bezahlen, dass jemand überprüft, ob sie sicher ist).

2
IMSoP