![]() |
|
|
Themen-Optionen |
|
|
Nach oben #1 |
|
Neuer Benutzer
Registriert seit: 19.09.2007
Beiträge: 6
|
Heho, die nerverei kann beginnen
Möchte meiner index.php per URL nen hinweiß geben, welche Seite eingebunden werden soll. Habs nun so gelöst, und wollte wissen ob da ein Sicherheitsrisiko besteht, oder ob es "sicher" gegen ausseneinwirkung ist. index.php (übergeben wird mit index.php?url=news PHP-Code:
PHP-Code:
Ich hab gezielt auf fertige CMS verzichtet. Hab noch etwas Zeit, und möchte mich mit ner eigens aufgebauten Seite erstmal zurechtfinden. Denke da lernt man etwas mehr =) lg Nerdii |
|
|
|
|
|
Nach oben #2 | |
|
Irgendwas mit e
Registriert seit: 26.08.2005
Ort: Mannheim
Beiträge: 388
|
Also erstmal solltest du dir angewöhnen, dein Script zu ordnen.
Im Grunde spielt sich das ungefähr so ab (so mach ichs immer) 1. Konstantendefinierung 2. Funktionenimplementierung 3. Variablendefinierung 4. eigentlicher Code Also würde ich an deiner Stelle das Belegen von $url nach vorne schieben und dann bereits ein Fallbacksystem implementieren: PHP-Code:
Zitat:
Diese Art der GET- und POST-Variablen empfiehlt sich imho überall, wo man Sonderzeichen nicht als gültige Eingabe berücksichtigen muss, bzw. auch mit umgewandelten Sonderzeichen arbeiten kann. Bei Variablen, die nur Integer-Werte annehmen sollen dürfen bspw. empfiehlt sich im Erfolgsfall per "(int) $GET['url']" ein entsprechendes Typecasting drüber zu jagen. Schau dich zu dem Thema auch mal in der Tutorial-Ecke um, da findest du Infos und Tipps&Tricks en masse...
__________________
In the beginning was the word and the word was content-type: plain/text heute code ich, morgen debug ich und uebermorgen cast ich die koenigin auf int |
|
|
|
|
|
|
Nach oben #4 |
|
Neuer Benutzer
Registriert seit: 19.09.2007
Beiträge: 6
|
Hi Jojo
Vielen Dank für deine Antwort. Verstehen tu ich es, ist nicht allzu schwer mit etwas logik =) Hab das ganze nun danach umgestellt: PHP-Code:
Werde auch in Zukunft versuchen, diese 4 Punkte aufrecht zu erhalten. @Bleistift: lol =) Lg Nerdii |
|
|
|
|
|
Nach oben #5 |
|
Irgendwas mit e
Registriert seit: 26.08.2005
Ort: Mannheim
Beiträge: 388
|
@Bleistift
HAHAHA ^^ Ja, ich glaub das werd ich nie los
__________________
In the beginning was the word and the word was content-type: plain/text heute code ich, morgen debug ich und uebermorgen cast ich die koenigin auf int |
|
|
|
|
|
Nach oben #6 |
|
Erfahrener Benutzer
Registriert seit: 04.01.2006
Ort: Kassel
Beiträge: 756
|
Hi "Nerdii".
Das mit den htmlentities() ist Quatsch. Das ist eine Funktion, die man bei der Ausgabe von werten verwendet, vor allem um XSS-Attacken auszuschließen. Prinzipiell ist meine Empfehleung, die eingehenden Werte erstmal so wie sie sind anzunehmen und dann je nach Operation ggf. zu entschärfen. Wenn du den Wert einfach nur gegen die assoziativen Indizes eines Arrays vergleichst, brauchst du da garnichts zu entschärfen, wenn du sie in eine Datenbankabfrage setzt, brauchst du z.B. mysql_real_escape_string(), wenn du sie der Shell übergibst baruchst du wieder eine andere Funktion. Was du machen solltest, wäre die Option magic_quotes_gpc[1] zu überprüfen und entsprechend zu reagieren (im Bugtracker[2] gibt es mehr Infos dafür). [1] http://de.php.net/manual/en/security.magicquotes.php [2] http://bugs.php.net/bug.php?id=29776 Also: Erstmal alle externen Variablen so reinnehmen, wie sie sind (ggf. erstmal wieder herstellen, wie sie eigentlich waren) und dann je Kontext entsprechend behandeln. Weiter schau dir mal das hier an: PHP-Code:
PHP-Code:
Wenn du das so änderst, hast du aber genau das Thema Sicherheit drinnen. 1. Brauchst du ein Verzeichnis, in dem ausschließlich derartige Dateien liegen, 2. musst du sicherstellen, dass durch jeden Beliebigen Parameter tatsächlich nur auf dieses Verzeichnis zugegriffen wird (z.B. darf ein url=../config.txt nicht dazu führen, dass eine solche konfigurations-Datei eingebunden und angezeigt wird). Dein Code könnte also etwa so aussehen: PHP-Code:
Ein paar Erläuterungen: - Mit dem Buchstaben vor den Variablennamen gebe ich den Typ an. Ungarische Notation heißt das glaube ich. Ist absolut hilfreich und wärmstens zu empfehlen. - Als Modulnamen werden hier per regulärem Ausdruck nur Werte akzeptiert, die mit einem Großbuchstaben beginnen und dann beliebig viele (0-n) Groß- oder Kleinbuchstaben enthalten. Was auch immer du da nimmst - wichtig halt, das keine ".." enthalten sind. - Wenn du solche Geschichten in Funktionen auslagerst, dann wird dein eigentlicher Code sehr schlank und auch ohne Kommentare gut lesbar. - <?php würde ich klein schreiben (Großschreibung ist unüblich und könnte Probleme mit IDEs, Highlightern oder sonst was machen) und das letzte ?> kannst du immer weglassen. Ist unnötig und nur zusätzliche Fehlerquelle (falls danach noch Leerzeichen/-zeilen stehen) Basti Geändert von Basti (04.10.2007 um 12:54 Uhr). |
|
|
|
![]() |
| Lesezeichen |
| Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1) | |
| Themen-Optionen | |
|
|
Ähnliche Themen
|
||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| PHP 5.1.5, PHP 4.4.4 und PHP 5.2.0 RC2 veröffentlicht | Ben | Nachrichten | 2 | 01.09.2006 16:05 |
| [PHP] 404-Fehlerseiten als Chance | PaterNoster | Tutorials | 0 | 23.04.2006 15:04 |
| Neue PHP "release candidates": PHP 4.4.2 RC 1 und PHP 5.1 RC 6 | Ben | Nachrichten | 1 | 21.11.2005 20:48 |
| Den Traffic einer Seite mit PHP messen | Chr!s | PHP-Programmierung | 8 | 19.09.2005 17:17 |
| Bild aus DB auslesen und in Seite einbinden | pago | PHP-Programmierung | 10 | 20.04.2005 09:26 |