Frage:
Das Hosting-Unternehmen riet uns, PHP aus Sicherheitsgründen zu vermeiden. Haben sie recht
Yumecosmos
2016-06-28 21:40:51 UTC
view on stackexchange narkive permalink

Ich mache ein Redesign für einen Kunden, der verständlicherweise Bedenken hinsichtlich der Sicherheit hat, nachdem er in der Vergangenheit gehackt wurde. Ich hatte ursprünglich vorgeschlagen, ein einfaches PHP-Include für Kopf- und Fußzeilenvorlagen und ein gewünschtes Kontaktformular zu verwenden. Sie zögern, weil sie von ihrem Hosting-Unternehmen darauf hingewiesen wurden, dass die Verwendung von PHP ein Sicherheitsrisiko darstellt, das es jemandem ermöglichen könnte, in cPanel einzudringen und die Kontrolle über die Site zu erlangen.

Das klingt für mich so, als würde man es jemandem erzählen niemals fahren, damit sie keinen Autounfall haben. Mein Bauchgefühl ist, dass der Host versucht, dem Kunden die Schuld für Sicherheitslücken in seinem eigenen System zu geben. Außerdem ist auf dem Server immer noch PHP installiert, unabhängig davon, ob wir es verwenden oder nicht. Daher frage ich mich, um wie viel sich die Angriffsfläche dadurch tatsächlich verringert. Da ich jedoch kein Sicherheitsexperte bin, möchte ich meine nicht beibehalten Fuß in meinem Mund.

Ich sagte meinem Kunden, dass er zur Bearbeitung des Kontaktformulars eine Form von dynamischem Scripting benötigt. (Falsch?) Sie fragten, ob ich nur PHP auf dieser einen Seite verwenden könnte. Wäre dies messbar sicherer oder entspricht es dem Verschließen Ihrer Autotüren und dem Herunterklappen des Fensters?

Wie viel Wahrheit steckt in der Behauptung, ein PHP-Skript zu verwenden , egal wie einfach, ist ein inhärentes Sicherheitsproblem? Wir haben Shared Hosting ohne SSL. Ist es vernünftig anzunehmen, dass wir aufgrund der Verwendung von PHP gehackt wurden? Werden wir sicherer sein, wenn wir es nicht verwenden, aber nicht deinstallieren können? Wenn nicht, haben wir andere Probleme.

(Wäre die Antwort für eine andere Sprache anders ?)

Kommentare sind nicht für eine ausführliche Diskussion gedacht.Dieses Gespräch wurde [in den Chat verschoben] (http://chat.stackexchange.com/rooms/41822/discussion-on-question-by-yumecosmos-hosting-company-advised-us-to-avoid-php-for).
Neun antworten:
Alexander O'Mara
2016-06-28 22:06:53 UTC
view on stackexchange narkive permalink

Es ist nicht so sehr so, dass PHP selbst Sicherheitsprobleme hat (vorausgesetzt, es werden Sicherheitsupdates benötigt), da es eine Menge populärer PHP-basierter Software mit weit verbreiteten Sicherheitsproblemen gibt. Sie könnten PHP dafür verantwortlich machen, dass es eine Sprache ist, die Ihnen genug Seil gibt, um sich selbst zu ersticken, aber das eigentliche Problem ist, wie häufig anfälliger PHP-Code tatsächlich ist. Man muss nicht weiter suchen als bis zum Stack Overflow PHP-Tag, um PHP-Neulinge zu finden, die schrecklich anfälligen Code schreiben, der auf einer Gräueltat eines alten Tutorials basiert.

Zusätzlich eine beträchtliche Anzahl beliebter PHP Software, die für ihre weit verbreiteten Sicherheitslücken bekannt ist, basiert auf sehr altem Code und Codierungspraktiken. Viele dieser alten Praktiken werden aufgrund von Sicherheitsproblemen als schlechte Praktiken angesehen.

Für mich klingt dies so, als würde man jemandem sagen, er solle niemals fahren, damit er keinen Autounfall erleidet.

So ziemlich ja. Ein besserer Rat könnte lauten: "Fahren Sie kein altes Auto ohne Airbags".

Mein Bauchgefühl ist, dass der Host versucht, dem Kunden die Schuld für Sicherheitslücken zu geben ihr eigenes System.

Nicht unbedingt. Wenn ein Benutzer dasselbe Kennwort für die WordPress-Site und cPanel verwendet, gefährdet die Beeinträchtigung des WordPress-Kennworts auch cPanel. Das wäre die Schuld des Benutzers. Hacker müssen jedoch selten so weit kommen und nur eine PHP-Shell verwenden.

Ich sagte meinem Kunden, dass sie zur Verarbeitung des Kontaktformulars eine Form von dynamischem Scripting benötigen. (Falsch?)

Nicht unbedingt wahr. Sie können einen Drittanbieter-Service verwenden, um den E-Mail-Versand abzuwickeln. Anschließend übernimmt der Dienst die dynamische Server-Skripterstellung und übernimmt die Auswirkungen auf die Sicherheit. Es gibt zahlreiche solcher Dienste mit unterschiedlichen Funktionen, und sie sind beliebt, um Kontaktformulare auf statisch generierten Websites zu aktivieren.

Wie viel Wahrheit steckt in der Behauptung, dass die Verwendung eines PHP-Skripts, egal wie einfach, ein inhärentes Sicherheitsproblem darstellt?

Einige, aber nicht viel. PHP enthält sowohl in PHP als auch in der Serversoftware, die es ausführt, aktiven Code. Sollte es jemals eine Sicherheitslücke in diesem Prozess geben, die nicht von einem bestimmten PHP-Code abhängt, könnte diese ausgenutzt werden. Obwohl dieses Risiko gering ist, ist es ein Risiko, das ein Server ohne solche Unterstützung nicht hat.

Kommentare sind nicht für eine ausführliche Diskussion gedacht.Dieses Gespräch wurde [in den Chat verschoben] (http://chat.stackexchange.com/rooms/41900/discussion-on-answer-by-alexander-omara-hosting-company-advised-us-to-avoid-php).
Luis Casillas
2016-06-29 01:49:02 UTC
view on stackexchange narkive permalink

"Richtig" ist vielleicht nicht das richtige Wort, aber "weise", "umsichtig" und "gewissenhaft" kommen mir in den Sinn. PHP hat seit seiner Gründung an einer Philosophie festgehalten, die die Korrektheit in Software abwertet. Es gibt eine Vielzahl von Situationen, in denen ein Programm auftreten kann, in denen andere Sprachen (z. B. Python) aufgeben und einen Fehler auslösen, um Ihnen mitzuteilen, dass Ihr Programm falsch ist. PHP entscheidet sich jedoch dafür, etwas Unsinniges zu tun und so weiterzumachen, als ob die Dinge gerecht wären gut.

Beachten Sie, dass Korrektheit für die Sicherheit sehr wichtig ist. Eine Sprache, die dazu neigt, Fehler links und rechts stillschweigend zu ignorieren, hat mehr als ihren gerechten Anteil an Programmen mit Sicherheitsproblemen. Beispielsweise haben Sie möglicherweise einen Code, von dem Ihre Programmierer glauben, dass er vor einem bestimmten Angriff schützt, der jedoch tatsächlich übersprungen wird, weil der Interpreter einen Fehler ignoriert.

Zusätzlich:

  • PHP wurde entwickelt, um den kleinsten Nenner von Programmierern mit der geringsten Motivation anzusprechen, sich in ihrem Handwerk zu behaupten. Und damit die wahrscheinlichste, die unsichere Software schreibt.
  • Das PHP-Team hat in der Vergangenheit zutiefst fehlerhafte Versuche unternommen, häufig auftretende Sicherheitsprobleme zu beheben. Schauen Sie sich zum Beispiel den SQL-Injection-Schutz an, der wiederholte fehlerhafte Versuche zur Behebung des Problems verrät: real_escape_string (weil der ursprüngliche Escape-String defekt war, aber erst später entfernt wurde ) vs. fügt Schrägstriche hinzu vs. mysql_escape_string / pg_escape_string und so weiter. Während so ziemlich jede andere Sprache nur mit vorbereiteten Anweisungen und Abfrageparametern ausgestattet war und gleich beim ersten Versuch ein auf alle Datenbanken erweiterbares Design erhielt.

Also für alle Gespräche in anderen Antworten darüber, wie Sie kann sichere Software in PHP schreiben, wenn Sie es versuchen, schwimmen Sie sehr gegen den Strom.

Kommentare sind nicht für eine ausführliche Diskussion gedacht.Dieses Gespräch wurde [in den Chat verschoben] (http://chat.stackexchange.com/rooms/42135/discussion-on-answer-by-luis-casillas-hosting-company-advised-us-to-avoid-php-fo).
Machavity
2016-06-29 00:57:11 UTC
view on stackexchange narkive permalink

Die Sicherheitsprobleme von PHP können im Allgemeinen auf zwei Kategorien eingegrenzt werden.

Nicht gepatchte Systeme

Derzeit werden in Wordpress-Statistiken mehr als die Hälfte aller Benutzer angezeigt führen PHP auf PHP-Versionen aus, die End of Life (PHP 5.2 - 5.4) überschritten haben. In zwei Wochen geht PHP 5.5 auf EOL und springt dann auf ungefähr 80% aller Installationen. Um fair zu sein, werden einige Enterprise / LTS Linux-Installationen Sicherheitskorrekturen zurückportieren, aber die überwiegende Mehrheit von ihnen verwendet keine rückportierten Korrekturen (oder einige patchen ihre Systeme nicht). Schlimmer noch, viele Leute weigern sich, PHP selbst zu aktualisieren. Entweder können / wollen sie ihren Code nicht aktualisieren, oder sie denken, dass ältere Software stabiler ist.

Wordpress (weltweit führende PHP-Anwendung Nr. 1) hat konzertierte Anstrengungen unternommen, um sicherzustellen, dass die Benutzer auf dem Laufenden bleiben Datum auf der Software selbst (und sie haben große Fortschritte gemacht), aber trotzdem verwenden nur 40% die neueste Version von Wordpress. Dies bedeutet, dass etwa 60% möglicherweise eine nicht gepatchte Sicherheitslücke aufweisen. Und das ist nur das Basisprogramm. Wordpress verfügt über ein riesiges Ökosystem an Plugins, und viele von ihnen haben eigene Sicherheitslücken.

Dann gibt es noch andere Probleme, wie viel älteren Code, der die nicht mehr existierende mcrypt verwendet Bibliothek. Und das ist nur ein PHP-Plugin, das Sie kompilieren können.

Extrapolieren Sie dies nun auf die Server, die nicht ausgeführt werden, und melden Sie Statistiken an WP. Es malt kein schönes Bild. Letzten Sommer habe ich eine Website gefunden, auf der eine E-Commerce-Seite mit Apache 1.3.3 und PHP 4.1.2 ausgeführt wird. Es war so alt, dass SSLv2 aktiviert war ...

Schlechte Praktiken

Wenn Sie lange genug mit SO PHP-Fragen herumhängen, werden Sie viele Leute sehen, die schlechten Code üben. Einige der Probleme, die ich im Laufe der Jahre gesehen habe

  • SQL Injection
  • MD5 ist eine gute Möglichkeit, Kennwörter zu schützen.
  • Verwenden veralteter APIs int ihren Code (dh ext / mysql , der alte MySQL-Connector)
  • Vertrauen in Benutzereingaben zur Ausführung von Code (dh Verwendung von eval mit vom Benutzer angegebenen Daten)
  • Sicherheitsrisiken im PHP-Code nicht ausschalten (dh die Funktion exec)

Für Ungeschulte sieht dies wie ein PHP-Problem aus, wenn es das ist Codierer und ihre Ökosysteme, die die Probleme verursachen. Vielleicht hatten sie es eilig. Vielleicht haben sie jemanden eingestellt, der dies in seiner Freizeit tut und "es einfach zum Laufen gebracht hat".

Kann es sicher sein?

JA! Diese Sicherheit erfordert jedoch einige Anstrengungen. Halten Sie Ihre PHP-Installation auf dem neuesten Stand. Halten Sie Ihren gesamten Server auf dem neuesten Stand. Host wird keine Sicherheit und Patches tun? Finden Sie einen anderen Gastgeber. (Ich bin erstaunt über die Leute, die sich dagegen wehren). Erstellen Sie Ihren eigenen Server (VMs sind billig). Vor allem aber aufpassen. Erfahren Sie alles über Sicherheit. Lassen Sie Ihre Website und Ihren Server nicht einfach auf See gehen.

Jemand, der Ihnen sagt, dass PHP unsicher ist, ist nur faul.

_Bauen Sie Ihren eigenen Server (VMs sind billig) ._ - Tun Sie dies nur, wenn Sie wissen, wie man einen Linux-Computer verwaltet, oder wenn die Verwaltung (kompetent) für Sie erfolgt.Menschen mit VMs, die keine Ahnung haben, wie sie vernünftig sicher gemacht werden sollen, sind an sich schon ein erhebliches Problem.
@marcelm True, aber zumindest können Sie mit Ihrer eigenen VM arbeiten, im Gegensatz zu einem Host, der nichts aktualisiert
Die Vorstellung, dass alle Sprachen aus Sicherheitsgründen gleich sind, ist einfach falsch.Wenn Sie sagen, dass Sie die Probleme beheben können, entspricht dies nicht einer Sprache, in der sie nicht vorhanden sind, oder Sie müssen diese Probleme aktiv einführen.
@JimmyJames Ich habe nie behauptet, dass alle Sprachen gleich sicher sind.PHP wird jedoch aktiv entwickelt und kann, wenn es richtig gepatcht und eingerichtet wird, ziemlich sicher sein.Das OP fragte, ob PHP von Natur aus unsicher sei, was es nicht ist.
"Jemand, der Ihnen sagt, dass PHP unsicher ist, ist nur faul."-> Dem stimme ich voll und ganz zu!
Nicht gepatchte Systeme machen PHP nicht allein unsicher.Nur weil eine Version von PHP eine Sicherheitslücke aufweist, bedeutet dies nicht unbedingt, dass der Code, den Sie mit dieser Version von PHP ausführen, Ihre Site für diese Sicherheitslücke anfällig macht.Sie müssten den Code verwenden, der anfällig ist, um der Sicherheitslücke zum Opfer zu fallen.Wenn es sich um einen Fehler handelt, der unabhängig von Ihrem Code ausgenutzt werden kann, dann sicher.
"Jemand, der Ihnen sagt, dass PHP unsicher ist, ist nur faul": Oder ist realistisch in Bezug auf die Faulheit, die passieren wird.Ich meine, es ist auch möglich, eine sichere Website in Raw Assembler zu schreiben, aber realistisch gesehen ist es sehr wahrscheinlich, dass dies nicht geschieht.
Die meisten dieser Faktoren existieren auch in anderen Sprachen.Wie um alles in der Welt hat MD5 etwas mit PHP zu tun?
Auch [sehr unsicher]: Verwenden von `unserialize ()` für externe Eingaben [der häufigste tatsächlich ausnutzbare Angriffsvektor].PHP hat eine Reihe von Schwachstellen, aber sie sind unter realen Bedingungen normalerweise kaum ausnutzbar.
munkeyoto
2016-06-28 22:04:12 UTC
view on stackexchange narkive permalink

PHP ist nicht weniger oder sicherer oder unsicherer als jede andere Sprache (Java, Rails usw.). Es dreht sich alles um die Codierung. Sind Checks and Balances vorhanden, um einen Angriff abzulenken, zu verteidigen, zu verhindern oder zu mildern? Zitat:

WhiteHat Security führte Schwachstellenbewertungen von mehr als 30.000 Websites mit .NET, Java, ASP, PHP, Cold Fusion und Perl durch. Die am häufigsten verwendeten Sprachen waren .NET (28,1 Prozent der Webanwendungen), Java (24,9 Prozent) und ASP (15,9 Prozent).

...

Die Programmiersprache .Net hatte durchschnittlich 11,36 Schwachstellen pro Slot, Java 11.32 und ASP 10.98. Die sicherste Sprache, ColdFusion, hatte sechs Sicherheitslücken pro Steckplatz. Perl hatte sieben Schwachstellen pro Slot und PHP 10.

...

Java machte 28 Prozent der gefundenen Schwachstellen und ASP 15 Prozent aus. "Auch hier muss die Anzahl der in der Sprache verfassten Bewerbungen sowie die Komplexität der Websites als ein Faktor angesehen werden", heißt es in dem Bericht. PHP machte auch 15 Prozent der entdeckten Sicherheitslücken aus. ColdFusion machte nur 4 Prozent der Sicherheitslücken und Perl 2 Prozent aus. ( Quelle)

Dies sagt nichts darüber aus, wie Websites im Hinblick auf gute Codierungspraktiken entwickelt wurden. Wenn Sie beispielsweise ungelernte Programmierer (mangels besserer Begriffe) in jeder Sprache nehmen, können diese Zahlen umgekehrt werden und Perl weist die meisten Schwachstellen auf, wobei .Net die geringsten aufweist. Alles läuft darauf hinaus, was der Code selbst tun soll. Wurde der Code so programmiert, dass er seine einzige Funktion mit Manipulationen / Missbrauch ausführt, die getestet wurden, bevor er in die Entwicklung aufgenommen wurde?

Es gibt viele Spickzettel zur Sicherheit, Best-Practice-Anleitungen und andere Artikel, die Sicherheitsprobleme behandeln, aber dies wird zu einer Situation wenn der Kunde aufgrund der Ratschläge seines Anbieters müde ist. Dies kann eine Hürde sein, da es zu einer Art "er sagte" wird, sagte sie, eine Art Kampf, um Ihren Kunden davon zu überzeugen, dass Sie die Site mit PHP erstellen können. Eine Methode, die ich verwenden könnte, wenn ich weiterhin PHP verwenden möchte, besteht darin, eine Demo-Site zu erstellen und dann einen Scanner zur Schwachstellenbewertung (Acunetix, AppScan, Burpsuite) zu verwenden, um nach Fehlern zu suchen. Wenn keine gefunden werden, würde ich dem Kunden den Bericht vorlegen, in dem die Sicherheitslage Ihrer Erstellung detailliert beschrieben ist, und ihn so erstellen (PDF usw.), dass er dem Anbieter präsentiert werden kann.

Ich würde bei Gleichstellungsansprüchen mit Java ohne Qualifikation vorsichtig sein, da die Installation der JRE (mehr noch, wenn sie auch aktiviert ist) ein Sicherheitsrisiko für Clients an und für sich darstellt, geschweige denn für den Server.
.Net ist keine Programmiersprache .... Ist der Artikel seriös?
@BalinKingOfMoria, Wenn jemand im Kontext von Programmiersprachen ".Net" sagt, verweist er normalerweise mit der .Net / CLR-Laufzeit auf C #.Gelegentlich beziehen sie sich mit der .NET / CLR-Laufzeit auf Visual Basic.NET.
@Mark Es kommt mir nur seltsam vor, dass sie nicht nur nicht den richtigen Namen verwenden, sondern ihn auch nicht richtig groß schreiben.
@NateDiamond: Ich vermute, dass es sich um [JAVA-Servlets] (https://en.wikipedia.org/wiki/Java_servlet) handelt, für die keine JRE auf einem Client installiert sein muss.
.net ist dieselbe einfache Sprache, egal ob Sie sie mit c #, VB, php, f # usw. schreiben.
@lepe Guter Punkt, obwohl es erfordert, dass es auf den Servern selbst installiert wird, was immer noch ein Bedrohungsvektor ist.
Wenn Sie sich also den Bericht ansehen, auf den Sie verwiesen haben, heißt es, dass 11% der Websites PHP waren, aber 15% der gefundenen Sicherheitslücken.Dies ist eine Überrepräsentation von 36% mehr als erwartet, wenn Sie davon ausgehen, dass Schwachstellen gleichmäßig auf mehrere Sprachen verteilt sein sollten.Java und .NET sind in den Sicherheitslücken ebenfalls überrepräsentiert, jedoch nur um 12% bzw. 11%.Nach dieser Metrik hat PHP (bei weitem) die schlechtesten Statistiken in diesem Bericht.
Für mich ist diese Antwort so, als würde man sagen, dass alle Autos gleich sicher sind, nur dass die Knöchelkopffahrer das Problem sind!Ich denke, es ist von Natur aus ungenau, über eine Sprache zu sprechen, ohne über die Leichtigkeit zu sprechen, Fehler in dieser Sprache schwer zu finden.PHP ist schwach typisiert und dies führt zu Fehlern, die Sie in einer anderen Sprache niemals machen würden.Im Wesentlichen erlaubt Ihnen die Sprache, diese Fehler zu machen.Es ist ein Fehler, dem Entwickler die Pflicht zu geben, perfekten Code zu schreiben, und zu sagen, dass es sich lediglich um ein Codierungsproblem handelt, geht fehl.Codierer und Sprache lassen sich nicht so leicht trennen.
Es ist interessant festzustellen, dass PHP-Sites "nicht so groß oder komplex sind wie .NET- oder Java-Sites, aber dennoch unter vielen der gleichen Probleme leiden".Obwohl PHP-Sites deutlich einfacher und weniger komplex sind, weisen sie im Grunde genauso viele Schwachstellen auf wie die komplexeren .NET- oder Java-Sites.Das ist so, als würde man feststellen, dass eine 1-Millionen-LOC-Anwendung eine ähnliche absolute Anzahl von Fehlern aufweist wie eine 100.000-LOC-Anwendung, und dann zu dem Schluss kommen, dass beide von ähnlicher Qualität sind.
@Voo "Obwohl PHP-Sites deutlich einfacher und weniger komplex sind, hatten sie im Grunde genommen genauso viele Schwachstellen wie die komplexeren."Eigentlich ist es schlimmer als das.Wie oben erwähnt, wurde eine unverhältnismäßig große Anzahl der Sicherheitslücken in Websites gefunden, die mit PHP erstellt wurden.Basierend auf diesem Bericht, auf den verwiesen wird, sind diese Websites einfacher und weisen ** mehr ** Schwachstellen pro Website auf.
Bevor Sie sagen, dass es "genauso sicher" ist, lesen Sie bitte [diesen Artikel] (http://phpsecurity.readthedocs.io/en/latest/_articles/PHP-Security-Default-Vulnerabilities-Security-Omissions-And-Framing-Programmers.html) - Spezielle URIs und andere Funktionen können Schwachstellen aktivieren. Wenn Sie in der PHP-Dokumentation nachsehen, erwähnen sie ** nicht einmal die XML-Schwachstellen, die bei nicht vertrauenswürdigen Eingaben auftreten können **.Vergleichen Sie dies beispielsweise mit Python. Auf der Hauptseite der [xml-Dokumente] (https://docs.python.org/2/library/xml.html#xml-vulnerabilities) werden mögliche Schwachstellen für jeden unterstützten Parser angezeigt
Als Programmierer stimme ich der Aussage nicht zu, dass PHP nicht mehr oder weniger sicher ist als andere Sprachen.Es ist nicht so, dass Sie keine sicheren Programme in PHP schreiben können, es ist nur so, dass PHP es unangemessen schwierig macht, während es lächerlich einfach ist, unsichere Programme zu schreiben.
@dandavis .NET ist überhaupt keine Sprache, das heißt, IBM PC ist eine Sprache.Die einfache Sprache, mit der die meisten anderen .NET-Sprachen verglichen werden, ist CIL.Diese dummen Verwirrungen helfen noönen.
@NoBugs Das PHP-Handbuch wird unabhängig von der Sprache gepflegt, obwohl es im Vergleich zu einigen, die ich gesehen habe, eine ziemlich großartige offizielle Ressource ist.Fühlen Sie sich frei, eine Seite über XML-Sicherheit beizutragen.Nun, ob jemand die Dokumente in PHP oder Python tatsächlich * lesen * und * verstehen * wird, ist eine andere Frage ...
@IMSoP _Sams Teach Yourself PHP, MySQL und Apache in 24 Stunden_ ist ebenfalls eine nützliche Ressource. Es wird jedoch empfohlen, beim Abfragen mit einer SELECT-Anweisung nicht zu maskieren. Suchen Sie nach "SELECT" und sehen Sie sich die Abfrage unter 384 an (`" SELECT fax_number, typevon Fax, wobei master_id = $ _POST [sel_id] "` und [andere Seiten.] (https://books.google.com/books?id=2hm3ScwClKIC&q=SELECT+WHERE#v=snippet&q=SELECT%20WHERE&f=false).Wenn Leute, die PHP-Nachschlagewerke schreiben, nicht wissen, wie sie am besten abfragen können, warum erwarten wir dann einen durchschnittlichen Joe PHP-Programmierer?
@SteveSether Ihre Analogie zu Autos ist sehr weit entfernt und Sie liefern keine Argumente dafür, warum eine schwach typisierte Sprache per Definition unsicher oder weniger sicher ist.ganz zu schweigen davon, dass es keine akzeptierte Definition dessen gibt, was schwach typisiert bedeutet
@ClaudiuCreanga Bitte lesen Sie "PHP ist ein Fraktal von schlechtem Design" für tatsächliche Argumente.Der Punkt, den ich versuche, ist, eine allgemeine Vorstellung von dem Problem zu geben.Echte Argumente können nicht in einem Kommentar gemacht werden.
@NoBugs Um meinem Vorschlag entgegenzuwirken, dass das Handbuch nicht als Teil der Kernsprache betrachtet wird, erweitern Sie die Definition weiter, sodass PHP als Sprache anscheinend für die Ausgabe jedes Verlags auf der Welt verantwortlich ist?Ich bin mir sicher, dass es auch schreckliche Ruby- und Java-Bücher gibt.Ich bin mir nicht sicher, was das beweist.
@IMSoP Ehrlich gesagt glaube ich nicht, dass ich solche Fehler in Ruby- und Java-Büchern / -Dokumenten gesehen habe, das ist genau mein Punkt.Für beste Sicherheit muss es eine konsistente Kultur geben, in der alles berücksichtigt wird, was die x / y / z-Bibliothek möglicherweise tun könnte, und möglicherweise unerwartet, was anscheinend weniger Teil der PHP-Benutzerkultur ist.Nehmen wir zum Beispiel die jüngsten Magento-Hacks, deren Kern darin bestand, ["Administrationssitzungen nur dann zu validieren, wenn eine Anfrage das Präfix '/ admin /' enthält"] (http://blog.checkpoint.com/2015/04/20)/ Analyse-Magento-Verwundbarkeit /)
@NoBugs Ich würde nicht sagen, dass dies wirklich "der Kern" des Angriffs ist: "Diese gut implementierten Schutzmaßnahmen schränken unsere Angriffsfläche wirklich ein, und wir konnten mit diesem Ansatz keine kritischen Schwachstellen (RCE, LFI ohne Suffix) finden."Letztendlich mussten sie ziemlich hart arbeiten, um eine SQLi-Sicherheitslücke zu finden und eine ganze Reihe von Angriffen zu verketten, um sie auszunutzen.Ich sehe das nicht als Beweis für eine "unsichere Kultur", als beispielsweise zuzulassen, dass JSON-Eingaben WHERE-Klauseln in Ihrem ORM beseitigen: https://groups.google.com/forum/#!topic/rubyonrails-security/t1WFuuQyavI
fluffy
2016-06-29 06:23:06 UTC
view on stackexchange narkive permalink

Eines der grundlegenden Probleme mit PHP ist wirklich ein grundlegendes Problem mit dem CGI-Modell der Dinge (auf dem PHP trotz der Fallen von mod_php basiert) - nämlich, dass benutzerbezogene Daten miteinander vermischt werden mit Skripten, und es wird sehr einfach für z Benutzer lädt hoch, um ein ausführbares Skript zu werden. Dies ist nicht unbedingt ein Problem mit PHP selbst, aber wenn PHP überhaupt auf einem System verfügbar ist, ist es eine sehr große Angriffsfläche. Einige Sicherheitsprobleme von WordPress-Plugins sind beispielsweise auf diesen Aspekt zurückzuführen.

Herkömmliche CGI-basierte Bereitstellungen haben dieses Problem in der Vergangenheit gemindert, indem CGI-Skripte nur aus einem vertrauenswürdigen Verzeichnis (z. B. / cgi-bin / ), aber viele Shared-Hosting-Anbieter haben diese Einschränkung schließlich aus Gründen der "Bequemlichkeit" gelockert, und diese Bequemlichkeit ist in PHP allgegenwärtig.

Viele moderne PHP-basierte Anwendungen verwenden häufig .htaccess als schneller und schmutziger Anforderungs-Routing-Mechanismus, der zwar zur Minderung dieser Probleme beiträgt, dies jedoch alles andere als universell ist und dennoch keine einfache Lösung darstellt.

Meiner Meinung nach besteht das größte Problem bei PHP darin, dass beliebiger PHP-Code so einfach für die Ausführung auf jedem Server verfügbar gemacht werden kann, auf dem er konfiguriert ist, und daher ist der in PHP geschriebene Code nicht unbedingt mehr oder weniger sicher als der geschriebene Code in anderen Sprachen (obwohl seine Standardbibliothek nicht gerade einen Gefallen tut, wenn es darum geht, se zu schreiben Cure Code), der Mechanismus, mit dem PHP-Skripte ausgeführt werden, stellt eine massive Sicherheitsherausforderung dar, da PHP sogar auf einem Server verfügbar ist.

HashHazard
2016-06-28 21:52:42 UTC
view on stackexchange narkive permalink

Ich stimme Ihrer Einschätzung zu, dass die Verwendung von PHP kein Sicherheitsrisiko erfordert. Es gibt einige Anbieter, die PHP aus dem gleichen Grund scheuen, aus dem WordPress als Sicherheitsrisiko angesehen wird. Es ist beliebt. Je häufiger etwas vorkommt, desto mehr Energie wird in die Entwicklung von Exploits investiert.

Allerdings würde ich PHP nicht vermeiden, wenn es ordnungsgemäß implementiert wird, zeitnahe Patches erhält und über ein gewisses Maß an Überwachung verfügt, um böswillige Aktivitäten zu erkennen . Fazit: Sicherheitsrisiken sind Sicherheitsrisiken, die für die Plattform unabhängig sind. Durch das Ändern der Skriptsprachen werden die Sicherheitsrisiken, die mit schlecht geschriebenem / entwickeltem / implementiertem Code verbunden sind, nicht gemindert.

Wordpress * ist * ein Sicherheitsrisiko.Sogar der Kern hat schreckliche Codierungspraktiken und eine lange Geschichte von Schwachstellen.
@Jacco Stimmt, aber es gibt schlechten Code im Darm vieler Anwendungen.WordPress ist in erster Linie darauf ausgerichtet, weil es beliebt ist.Der Kern hat in den letzten Iterationen einige Verbesserungen erfahren, obwohl er noch lange nicht perfekt ist.
Nennen Sie eine beliebte Anwendung / ein beliebtes System, das / das keine lange Geschichte von Sicherheitslücken aufweist.oh yeah android
@ClaudiuCreanga Wirklich?* [android] (http://androidvulnerabilities.org) * ist das Beispiel, das Sie als System ohne lange Geschichte von Schwachstellen verwenden werden?
Bristol
2016-06-28 22:51:40 UTC
view on stackexchange narkive permalink

Wenn Sie lediglich eine Standard-Kopf- / Fußzeile einfügen möchten, ist PHP möglicherweise übertrieben - einfache serverseitige Einschlüsse können dies tun.

PHP ist nicht von Natur aus gefährlich, wie in früheren Antworten dargelegt. Wenn Sie jedoch keine vollständige Skriptsprache auf dem Server benötigen, empfiehlt es sich, keine zu installieren. Wenn, wie Sie sagen, PHP sowieso auf dem Server installiert wird, ist das zusätzliche Risiko, das durch die Verwendung von PHP entsteht, ungefähr Null, solange Sie nichts Dummes tun. Das Einfügen einer Vorlage ist nicht dumm, es sei denn, Sie analysieren den Dateinamen anhand eines URL-Parameters.

Das Kontaktformular benötigt eine API und eine Datenbank dahinter, um die POST-Anforderung zu verarbeiten, wenn jemand sie sendet und es ist Wie gut dieser Teil geschrieben ist, der Dinge machen oder brechen wird - egal welche Sprache Sie verwenden, wenn es sich um eine SQL-Datenbank handelt, lohnt es sich, auf SQL Injection zu achten. Wenn die Eingaben des Benutzers in irgendeiner Weise an ihn oder den Client auf einer Webseite zurückgegeben werden, muss die (Java-) Skriptinjektion berücksichtigt und alles ordnungsgemäß HTML-maskiert werden. Im Vergleich zum Kontaktformular ist die Verwendung eines Includes so sicher wie möglich.

Wenn Sie nur eine Reihe von Webseiten und keine interaktive Webanwendung wünschen, besteht die ultimative Sicherheit darin, einen statischen Site-Generator zu verwenden. Der Server muss nur Dateien bereitstellen, was eine viel kleinere Angriffsfläche ergibt.

So:

Wie viel Wahrheit steckt in der Behauptung, dass die Verwendung eines PHP-Skripts, egal wie einfach, ein inhärentes Sicherheitsproblem darstellt?

So formuliert, fast keine. Ein Include-Header-Skript ist sicherlich keine Sicherheitslücke. Die Installation von PHP an erster Stelle, wenn Sie es nicht benötigen, ist keine bewährte Sicherheitsmethode. Es ist ein potenzielles Problem, es zu installieren und nicht regelmäßig zu aktualisieren, wenn Sicherheitspatches veröffentlicht werden, ebenso wenig wie die Richtlinie, wer für diese Updates verantwortlich ist - Wird der Kunde nach Abschluss des Site-Designs dafür verantwortlich sein? Oder der Hosting-Anbieter? Wenn sich der Client darüber Sorgen macht, sollte er überhaupt kein PHP auf dem Server haben. Wenn nicht, gibt es keinen sicherheitsrelevanten Grund, es nicht an Orten zu verwenden, an denen Sie wissen, was Sie tun.

"Die Installation von PHP an erster Stelle, wenn Sie es nicht benötigen, ist keine bewährte Sicherheitsmethode. Es ist ein potenzielles Problem, es zu installieren und nicht regelmäßig zu aktualisieren, wenn Sicherheitspatches herauskommen."Leider ist es Shared Hosting, also keine große Wahl in dieser Angelegenheit.: / Ich muss mehr über serverseitige Includes erfahren, danke für den Tipp!
@Yumecosmos Wenn es sich um Shared Hosting handelt, sind die anderen Mandanten des Hosting-Dienstes einem weitaus größeren Risiko ausgesetzt als PHP selbst.Shared Hosts zögern im Allgemeinen, etwas nur für einen der vielen (manchmal Tausenden) Mandanten zu installieren, und haben alle möglichen Gründe, dies zu vermeiden.Ein einfaches "Sie sind auf Shared Hosting, was Sie sehen, ist was Sie bekommen" wäre ehrlicher (und völlig fair).
@ceejayoz Bis zu diesem Punkt wurde meine Site fast jedes Mal, wenn sie gehackt wurde, über eine andere Site auf demselben gemeinsamen Hosting wie ein Vektor durchgeführt.Es gibt definitiv Dinge, die Sie tun können, um diese Möglichkeit einzuschränken, z. B. sehr vorsichtig mit Ihren Dateiberechtigungen umzugehen und so weiter.Ich habe einen nächtlichen Cron-Job, der meine Dateiberechtigungen überprüft und md5sum-Änderungen an allen meinen Dateien und einigen anderen Dingen feststellt.
Neil Davis
2016-06-29 06:16:09 UTC
view on stackexchange narkive permalink

Sprachen und Tools sind nicht von Natur aus unsicher, schlechte Code- und Sicherheitspraktiken sind es.

Da PHP eine geringe Eintrittsbarriere aufweist, können Personen, die die Netzwerksicherheit und die sichere Codierung nicht verstehen, Sicherheitsprobleme verursachen mit nicht informierten Entscheidungen.

Es ist nicht das Werkzeug, es ist der Affe, der es benutzt ;-)

In jeder Sprache geschriebener Code kann unsicher sein.

Sprachen mögen nicht von Natur aus unsicher sein, aber sie können angemessene Sicherheitsprinzipien haben, die tief in ihrem Design verwurzelt sind.PHP * nicht *, und das ist eine Untertreibung.Siehe https://eev.ee/blog/2012/04/09/php-a-fractal-of-bad-design/
Und deshalb sollte jeder Python lernen!Tut mir leid, ich zitiere "diese andere Sprache ist scheiße, also lerne Python!"Websites ist schlechte Form.Sie können auch Müll in Python schreiben.Ich habe Tonnen davon repariert.Python ist kein Wundermittel für inkompetente Programmierer.Sie schreiben Code in der Sprache, die Ihr Arbeitgeber standardisiert hat, oder in meinem Fall in den Wünschen des Kunden.Ich bin selbst Agnostiker.Ich codiere in Python, PHP, Java, .net, Perl und pflege sogar einige alte Cold-Fusion-Sites.Bitte entführen Sie keine Posts, um die Python-Agenda voranzutreiben.
* Ich * habe Python nirgendwo erwähnt.Ich habe Python noch nicht einmal * gelernt * (obwohl ich kurz davor bin).Wie Sie im Namen des gesunden Menschenverstandes meinen vorherigen Kommentar als "Pushing the Python Agenda" interpretieren können, ist verwirrend.Aber Ihre Antwort hier summiert sich im Grunde zu "Keine Sprache ist sicherer als jede andere Sprache", was Unsinn ist.([Diese Antwort] (http://security.stackexchange.com/a/128601/96753) enthält einige Einzelheiten zum Grund.)
Sie haben einen Link zu einer tollwütigen Meinung von Python-Evangelisten bereitgestellt
@user356540 Das allererste, was eevee über Python sagt: "Ich liebe Python. Ich werde auch gerne Ihr Ohr davon abhalten, sich darüber zu beschweren, wenn Sie es wirklich wollen. Ich behaupte nicht, dass es perfekt ist; ich habe gerade seine Vorteile abgewogenseine Probleme und kam zu dem Schluss, dass es am besten zu Dingen passt, die ich tun möchte. "Das ist nicht dasselbe wie ein tollwütiger Python-Evangelist zu sein.
Auf der Hauptseite von Python [xml docs] (https://docs.python.org/2/library/xml.html#xml-vulnerabilities) werden mögliche Schwachstellen für jeden unterstützten Parser angezeigt.Obwohl PHP auch diese Sicherheitslücken aufweist, wird dies in den [XML-Reader-Dokumenten] (http://php.net/manual/en/book.xmlreader.php) nicht erwähnt.:( Leider haben sogar gängige PHP-Bücher Beispiele mit SQL-Injektionen.
"Sie können auch Müll in Python schreiben".Das ist ein Strohmann.Das Argument ist, dass PHP es schwierig macht, korrekten Code für die unzähligen Argumente (erinnern Sie sich an register_globals?) Zu schreiben, die hier und anderswo erwähnt werden, und nicht, dass Sie auch mit anderen Sprachen keinen schlechten Code schreiben können.
Keiner dieser Kommentare macht die Punkte in meiner ursprünglichen Antwort ungültig.Sie können sicher in jeder Sprache codieren.Das Gegenteil ist auch der Fall.Es ist Sache des Programmierers, seine Tools und seinen Code sicher zu kennen.Wenn Sie glauben, dass eine Sprache dies für Sie erledigt, verstehen Sie die Sicherheit nicht.
+1 insgesamt, aber;Warum geht jeder davon aus, dass PHP eine niedrige Eintrittsbarriere hat und in welcher Beziehung steht dies zur Netzwerksicherheit?Und womit ist das verglichen?Ruby, Python, Java, C, Perl?Ich werde zugeben, dass Perl eine höhere Barriere hat, aber die meisten Ruby / Python-Evangelisten prahlen damit, dass ihre Sprache einen niedrigeren als den normalen Einstiegspunkt hat.Und um ehrlich zu sein, denke ich, dass getippte Sprachen wie Java einen niedrigeren Einstiegspunkt haben als nicht getippte.In der Tat, wenn ich in PHP codiere, tippe ich alles.Ich würde sagen, dass PHP einen höheren Einstiegspunkt hat als die meisten anderen Sprachen in seinem Alter.
@Voo, dass man in PHP schon lange tot ist.Jede Sprache hat absolut unsichere Funktionen
@Claudiu Es war in der Sprache für etwa ein Jahrzehnt (und erst 2012 entfernt), sogar als Standard.Nennen Sie ein veraltetes Merkmal, das sich in jeder anderen Mainstream-Sprache dem gleichen Grad an Wahnsinn nähert.Der Punkt ist: Wenn Sie so etwas in einer anderen Mainstream-Sprache vorgeschlagen hätten, wäre es sofort abgeschossen worden.
twigg
2016-07-25 16:30:55 UTC
view on stackexchange narkive permalink

"Sie zögern, weil sie von ihrem Hosting-Unternehmen darauf hingewiesen wurden, dass die Verwendung von PHP ein Sicherheitsrisiko darstellt, das es jemandem ermöglichen könnte, in cPanel einzudringen und die Kontrolle über die Site zu erlangen."

Wenn das Hosting-Unternehmen dies glaubt brauche cPanel, um PHP auszuführen, dann ist es Zeit, den Host zu verschieben



Diese Fragen und Antworten wurden automatisch aus der englischen Sprache übersetzt.Der ursprüngliche Inhalt ist auf stackexchange verfügbar. Wir danken ihm für die cc by-sa 3.0-Lizenz, unter der er vertrieben wird.
Loading...