Heim  >  Artikel  >  Backend-Entwicklung  >  Sichere PHP-Programmierung – einige Prinzipien des Website-Sicherheitsdesigns

Sichere PHP-Programmierung – einige Prinzipien des Website-Sicherheitsdesigns

不言
不言Original
2018-04-09 10:31:391644Durchsuche

Der Hauptinhalt dieses Artikels befasst sich mit einigen Prinzipien des Website-Sicherheitsdesigns in der PHP-Sicherheitsprogrammierung. Jetzt können interessierte Freunde einen Blick darauf werfen


Defense-in-Depth


Das Prinzip der Defense-in-Depth ist unter Sicherheitsexperten ein bekanntes Prinzip und verdeutlicht den erwiesenen Wert redundanter Sicherheitsmaßnahmen durch die Geschichte.

Das Prinzip der Tiefenverteidigung kann auf andere Bereiche ausgeweitet werden, nicht nur auf die Programmierung. Fallschirmspringer, die Ersatzfallschirme verwendet haben, können den Wert redundanter Sicherheitsmaßnahmen bestätigen, obwohl man nie möchte, dass der Hauptfallschirm ausfällt. Eine redundante Sicherheitsmaßnahme kann eine erhebliche Rolle beim potenziellen Ausfall primärer Sicherheitsmaßnahmen spielen.

Zurück im Bereich der Programmierung erfordert die Einhaltung des Prinzips der Tiefenverteidigung, dass Sie immer einen Backup-Plan haben. Wenn eine Sicherheitsmaßnahme versagt, muss eine andere Schutzmaßnahme bieten. Beispielsweise empfiehlt es sich, Benutzer vor der Durchführung wichtiger Vorgänge erneut zu authentifizieren, auch wenn in Ihrer Benutzerauthentifizierungslogik keine Fehler bekannt sind. Wenn ein nicht authentifizierter Benutzer in irgendeiner Weise vorgibt, ein anderer Benutzer zu sein, kann die Aufforderung zur Eingabe eines Passworts den nicht authentifizierten (nicht verifizierten) Benutzer möglicherweise daran hindern, einige wichtige Vorgänge auszuführen.

Obwohl eine Tiefenverteidigung ein vernünftiger Grundsatz ist, kann ein übermäßiger Zusatz von Sicherheitsmaßnahmen nur die Kosten erhöhen und den Wert verringern.

Geringstes Privileg

Früher hatte ich ein Auto, das einen Dienstmädchenschlüssel hatte. Dieser Schlüssel kann nur im Zündschloss verwendet werden und kann daher nicht zum Öffnen der Türen, der Konsole oder des Kofferraums verwendet werden. Er kann nur zum Starten des Fahrzeugs verwendet werden. Ich kann ihn dem Parkwächter geben (oder im Zündschloss lassen) und bestätige, dass der Schlüssel nicht für andere Zwecke verwendet werden kann.

Es ist sinnvoll, dem Parkwächter einen Schlüssel zu geben, der die Konsole oder den Kofferraum nicht öffnet, schließlich möchte man dort möglicherweise Wertsachen aufbewahren. Aber was für mich keinen Sinn ergibt, ist, warum es die Tür nicht öffnen kann. Das liegt natürlich daran, dass es bei mir um den Entzug von Befugnissen geht. Ich habe mich gefragt, warum dem Parkwächter die Befugnis entzogen wurde, die Tür zu öffnen. Beim Programmieren ist das eine sehr schlechte Idee. Stattdessen sollten Sie überlegen, welche Berechtigungen erforderlich sind, und jeder Person so wenig Berechtigungen erteilen, wie sie für die Erledigung ihrer Arbeit benötigt.

Ein Grund, warum der Zimmermädchenschlüssel die Autotür nicht öffnen kann, ist, dass der Schlüssel kopiert werden kann und der kopierte Schlüssel möglicherweise in Zukunft zum Diebstahl des Autos verwendet werden könnte. Dieses Szenario mag unwahrscheinlich klingen, ist aber ein Beispiel dafür, wie unnötige Autorisierungen Ihr Risiko erhöhen können, selbst bei einer geringfügigen Erhöhung der Berechtigungen. Die Risikominimierung ist ein wichtiger Bestandteil der Entwicklung von Sicherheitsprogrammen.

Sie müssen nicht darüber nachdenken, wie eine Erlaubnis missbraucht werden kann. Tatsächlich ist es nahezu unmöglich, die Aktionen jedes potenziellen Angreifers vorherzusagen.

Einfachheit ist schön

Komplexität führt zu Fehlern, und Fehler können zu Sicherheitslücken führen. Diese einfache Tatsache verdeutlicht, warum Einfachheit für eine sichere Anwendung so wichtig ist. Unnötige Komplexität ist genauso schlimm wie unnötiges Risiko.

Zum Beispiel ist der folgende Code ein Auszug aus einem aktuellen Sicherheitshinweis zu Sicherheitslücken:

<?php
	 
	$search = (isset($_GET[&#39;search&#39;]) ? $_GET[&#39;search&#39;] : &#39;&#39;);
 
?>

Dieser Prozess kann insbesondere für unerfahrene Entwickler durch die Tatsache verwirren, dass die Variable $search fehlerhaft ist ( Hinweis: Eine kontaminierte Variable bedeutet, dass der Wert der Variablen während der Programmausführung nicht direkt durch die Zuweisungsanweisung angegeben wird, sondern aus anderen Quellen stammt (z. B. Konsoleneintrag, Datenbank usw.). Die obige Anweisung entspricht dem folgenden Programm:

<?php
 
  $search = &#39;&#39;;
 
  if (isset($_GET[&#39;search&#39;]))
  {
		$search = $_GET[&#39;search&#39;];
  }
 
?>

Die beiden oben genannten Verarbeitungsabläufe sind genau gleich. Achten Sie nun bitte auf die folgende Anweisung:

$search = $_GET[&#39;search&#39;];

Durch die Verwendung dieser Anweisung wird sichergestellt, dass der Zustand der $search-Variablen intakt bleibt, ohne den Prozess zu beeinträchtigen, und es ist auch erkennbar, ob sie kontaminiert ist.

Minimierte Gefährdung

PHP-Anwendungen erfordern eine häufige Kommunikation zwischen PHP und externen Datenquellen. Die wichtigsten externen Datenquellen sind Client-Browser und Datenbanken. Wenn Sie die Daten korrekt verfolgen, können Sie feststellen, welche Daten offengelegt wurden. Das Internet ist die primäre Offenlegungsquelle, da es sich um ein sehr öffentliches Netzwerk handelt und Sie stets darauf achten müssen, dass Daten nicht im Internet offengelegt werden.

Die Offenlegung von Daten bedeutet nicht unbedingt ein Sicherheitsrisiko. Die Datenexposition muss jedoch so gering wie möglich gehalten werden. Wenn ein Benutzer beispielsweise ein Zahlungssystem betritt und seine Kreditkartendaten an Ihren Server übermittelt, sollten Sie SSL zum Schutz verwenden. Wenn Sie seine Kreditkartennummer auf einer Bestätigungsseite anzeigen möchten, müssen Sie zum Schutz auch SSL verwenden, da die Kartennummerninformationen vom Server an seinen Client gesendet werden.

Im vorherigen Beispiel erhöht beispielsweise die Angabe der Kreditkartennummer offensichtlich die Wahrscheinlichkeit einer Enttarnung. SSL verringert zwar das Risiko, aber die beste Lösung besteht darin, das Risiko vollständig zu eliminieren, indem nur die letzten vier Ziffern angezeigt werden.

Um die Gefährdung durch sensible Daten zu verringern, müssen Sie identifizieren, welche Daten sensibel sind, sie nachverfolgen und jede unnötige Datengefährdung verhindern. In diesem Buch zeige ich Ihnen einige Techniken, die Ihnen helfen, viele gängige Arten sensibler Daten zu schützen.

Verwandte Empfehlungen:

Häufige PHP-Sicherheitsangriffe und -Lösungen

Detaillierte Erläuterung der PHP-Sicherheitsbeispiele

Detaillierte Erläuterung der PHP-Sicherheitsentwicklungsbibliothek

Das obige ist der detaillierte Inhalt vonSichere PHP-Programmierung – einige Prinzipien des Website-Sicherheitsdesigns. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn