Hallo!
Bin php-anfänger, brauche nur ein paar php funktionen und habe nicht die Zeit mich komplett einzuarbeiten. Jetzt habe ich eine Frage zur Sicherheit in Verbindung mit GET. Vielleicht hat jemand kurz Zeit und Lust mir zu antworten.
Habe eine ziemlich lange Auflisten von Bildern und beim Anklicken eines Bildes wird eine xy.php aufgerufen und eine Variable mitübergeben. Die Variable enthält den Namen der dem Bild entsprechenden Textdatei deren Inhalt dann an bestimmten Stellen in der aufgerufenen xy.php angezeigt wird. Also nichts mit Passwörtern oder so.
Gibt es dabei gravierende Sicherheitsprobleme (z.B.Manipulation von außen - die angesprochenen Daten liegen ja nur auf meinem Server - oder könnte jemand den Inhalt der Textdateien z.B. ändern ? )
Vielen Dank !
Ankündigung
Einklappen
Keine Ankündigung bisher.
GET und Sicherheit
Einklappen
Neue Werbung 2019
Einklappen
X
-
@jw-lighting: Diese Tipps sind zu allgemein und damit gefährlich. Ein str_replace('..' reicht bspw. nicht aus. Selbiges gilt für eine statische Dateiendung.
-
An dein Passwort kommt man im Normalfall damit nicht. Ebenfalls kann man die Inhalte der Dateien nicht ändern oder Datein löschen.
Wie schon angesprochen, solltest du aber einiges in dein Script implementieren, um diese Sicherheit auch wirklich zu erreichen:
1. Alle zu lesenden Dateien in ein Verzeichnis (evtl. UZnterverzeichnisse)
2. Verhindern, das im Dateisystem nach oben gegangen wird:
PHP-Code:$pfad = str_replace('..', '', $pfad);
(Auch hier vorher '..' entfernen (siehe Punkt 2)!)
PHP-Code:// z.B.
include 'info_img_'.$imgId.'.txt';
Einen Kommentar schreiben:
-
Ein Gast antworteteein whitelisting von zeichen, welche im dateinamen vorkommen dürfen sollte reichen. Andernfalls kann jemand ungehindert passwortdateien o.ä. auslesen, weil bei ungefilterten dateinamen auch beispielsweise ein "../" vorkommen könnte, mit dem man schön durch die festplatte navigieren kann.
Ausserdem würde ich die dateiendung fix angeben.
also quickndirty:
PHP-Code:$safeFilename = preg_replace('/[^A-Za-z0-9_\-]+/', '', $_POST['infos']) . '.txt';
abd.php?infos=xyz
mit $safeFilename kannst du dann weiterarbeiten und die datei laden etc....
Einen Kommentar schreiben:
-
Einen Kommentar schreiben:
-
Wie bereits gesagt Sicherheit = 0
Die Variablen überprüfe ich
PHP-Code:$datei = $_GET["haus"];
anzeige.php?haus=275
PHP-Code:if(is_numeric($_GET["haus"])) {
if(file_exists("c".$_GET["haus"].".txt")) {
//....
}
}
Einen Kommentar schreiben:
-
Ja, das kann reichen. Durch Cross site scripting. Dein obiges Beispiel kann auch wunderbar Systemdateien auslesen.
Einen Kommentar schreiben:
-
Zitat von BlackSpirit Beitrag anzeigenDas kann ich dir nicht sagen da ich dein Script nicht kenne und ohne Grundlagen wird das nix.
Ich rufe in einer reinen html-site Folgendes auf:
<a href="anzeige.php?haus=c275.txt&">
<img src="images/c275/bild1kl.jpg" width="125" height="96"
class="smallbord" alt=""></a>
Anzeige.php ist auch reines HTML - mit zwei php-Abschnitten:
Dateiinhalt in Array lesen
<?php
$datei = $_GET["haus"];
$array = file($datei);
?>
und Dateiinhalt an den entsprechenden Stellen ausgeben:
<div id="content">
<h2>
<?php
echo $array[0];
?>
</h2>
<ul>
<li><span class="fett">Lage:</span>
<?php
echo $array[1];
?>
</li>
<li><span class="fett">Entfernung zum Meer:</span
<?php
echo $array[2];
?>
</li>
usw.
Mehr brauche ich nicht, will nur die jetztige Site (komplett in html gemacht) etwas flexibler und für mich wartungsfreundlicher gestalten. Bis jetzt habe ich ca. 250 Artikel zum Anklicken und somit auch 250 Seiten - also für jeden Artikel eine Seite.
Danke für Deine Mühe !
Einen Kommentar schreiben:
-
Zitat von nikosch Beitrag anzeigenAuf Basis Deiner obiegn Information kann man gar nichts sagen.
Einen Kommentar schreiben:
-
Das kann ich dir nicht sagen da ich dein Script nicht kenne und ohne Grundlagen wird das nix.
Einen Kommentar schreiben:
-
Zitat von BlackSpirit Beitrag anzeigenDu musst die GET Werte überprüfen bevor du mit ihnen weiterarbeitest.
Kleines bsp:
url.com?id=1234
PHP-Code:if(is_numeric($_GET['id'])) {
//OK
} else {
//was auch immer...
}
Einen Kommentar schreiben:
-
Hatte gehofft, Antworten zu bekommen nach denen ich eventuelle Sicherheitsprobleme bewerten bzw. einschätzen kann (nach meinem Maßstab).
Einen Kommentar schreiben:
-
Du musst die GET Werte überprüfen bevor du mit ihnen weiterarbeitest.
Kleines bsp:
url.com?id=1234
PHP-Code:if(is_numeric($_GET['id'])) {
//OK
} else {
//was auch immer...
}
Einen Kommentar schreiben:
-
Dann würde ich eben die Zeit aufwenden müssen. Hatte gehofft, Antworten zu bekommen nach denen ich eventuelle Sicherheitsprobleme bewerten bzw. einschätzen kann (nach meinem Maßstab).
Einen Kommentar schreiben:
-
Und wenn wir jetzt ja sagen, was würdest Du dann ohne Wissen um PHP- und Servertechniken damit anfangen wollen?
Einen Kommentar schreiben:
Einen Kommentar schreiben: