Schrift
[thread]1050[/thread]

[PHP] Code-Injection in PHP: Wie verhindert man Injections?



<< >> 9 Einträge, 1 Seite
Thorium
 2006-06-06 01:03
#10687 #10687
User since
2003-08-04
232 Artikel
BenutzerIn
[Homepage] [default_avatar]
Immer wieder hört man von Sicherheitslücken in PHP anwendungen welche Ausführen von beliebigem PHP-Code erlauben. Gerade habe ich wieder einen solchen Artikel gelesen [1] und ich frage mich, warum es immer PHP-Projekte trifft. Ich kenne mich leider mit PHP zuwenig aus und kann deshalb nicht beurteilen ob das ein allgemeines PHP-Problem ist, oder von den Entwicklern einfach nur massig Mist gebaut wird.
Ich habe mir jedenfalls mal den Code von Mambo näher angeschaut und muss sagen, dass mir dieser nicht gerade geheuer ist. Wochen später bestätigen sich dann meine Befürchtungen und es wurde in Mambo eine solche Sicherheitslücke bekannt.
In Perl wäre so etwas ja nur möglich, wenn über einen Userinput explizit ein eval laufen würde - aber wer programmiert denn sowas?
Was ist so Grundverschieden an PHP und Perl, dass PHP massig solche Dinge zulässt? Muss man bei PHP-Code prinzipiell vorsichtiger sein?

[1] http://www.heise.de/security/news/meldung/73872
Per|li|nist der; -en, -en <zu ↑...ist>: a) Anhänger, Vertreter der radikalen Perlinisten die Perl als die einzig wahre Sprache ansehen; b) Mitglied einer perlinistischen Community.
jan
 2006-06-06 01:29
#10688 #10688
User since
2003-08-04
2536 Artikel
ModeratorIn
[Homepage] [default_avatar]
naja, prinzipiell muss man da nicht allzu viel angst haben. register_globals immer auf off halten.

ich denke, es geht da ja um code- und sql-injections

sql ist insofern bei php oft problematisch, weil sich bei phpprogrammierern offenbar nie durchgesetzt hat, dass man userinput quotet (am besten auch prüft, aber quoten ist ja schon mal was), so ist es möglich, sql an die db zu senden und dann teils beliebige tabellen zu löschen oder daten zu verändern.

die code-injections stelle ich mir erstmal so vor, dass a) mit url_fopen = on gearbeitet wird, dh wenn man eine url mit include einbindet, holt php sie und führt fröhlich das aus, was zurückkommt. wenn nun irgendwer mit dynamischen includes arbeitet und man kann diese umbiegen und auf eine beliebige url schicken, dann ist's einfach. b) dynamische includes und irgendeine datei wird mit userinput geschrieben und kann dann includet werden. kA, ob's noch was gibt, aber ich bezweifle, dass es etwas grundlegendes ist, sonst wäre ja jedes phpscript angreifbar. ich denke, es liegt eher daran, dass bei größeren opensource-projekten bei php eine ganze menge amateure hacks beisteuern oder an der core-entwicklung beteiligt sind. man schaue sich nur mal schön oscommerce an und erfreue sich daran :)
esskar
 2006-06-12 15:49
#10689 #10689
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
sowas ist dann meistens nicht die schuld der programmiersprache, sondern liegt oft an der Unwissenheit der Authoren.
Thorium
 2006-06-12 23:10
#10690 #10690
User since
2003-08-04
232 Artikel
BenutzerIn
[Homepage] [default_avatar]
Naja nun kann es die Programmiersprache dem Autor gerade sehr leichtmachen etwas so falsch zu machen, dass daraus eine Sicherheitslücke resultiert.
Wenn z.B. prinzipiell alles Ausgeführt würde was man zuteilt; ausser man verhindere das mit uneval wären daraus resultierende Sicherheitslücken auch des Autors Schuld:
Code: (dl )
1
2
3
$dangerous = "eval(system('rm -rf /'))";
$var = $dangerous;
$var = uneval($dangerous);


Es scheint mir bei der oben erwähnten Sicherheitslücke doch ziemlich komisch, dass der Inhalt bei "[[ inhalt ]]" ausgeführt wird. Und irgendwie bezweifle ich, dass die Entwickler einen eval auf den Input ausführen...
Wenn man den Securityfix anschaut, lässt sich nämlich für einen Normalsterblichen-Nicht-PHPler nicht erkennen wo der Fehler war. Auch ist weit und breit kein eval zu sehn... (habe das Beispiel leider nicht zur Hand).
Ich glaube mal erfahren zu haben, dass mitgegebene Variablen in PHP prinzipiell gleich den mitegebenen Namen tragen:

Code: (dl )
1
2
# Script.php?somevar=something
print $somevar;


Wenn das nämlich so wäre, wäre das ein solches Beispiel wo die Programmiersprache die Fehleranfälligkeit herausfordert.
Per|li|nist der; -en, -en <zu ↑...ist>: a) Anhänger, Vertreter der radikalen Perlinisten die Perl als die einzig wahre Sprache ansehen; b) Mitglied einer perlinistischen Community.
jan
 2006-06-12 23:54
#10691 #10691
User since
2003-08-04
2536 Artikel
ModeratorIn
[Homepage] [default_avatar]
Quote
Ich glaube mal erfahren zu haben, dass mitgegebene Variablen in PHP prinzipiell gleich den mitegebenen Namen tragen:


das ist nur so, wenn register_globals = on in der php.ini definiert ist. schwachsinnige idee am anfang, mittlerweile ist es per default auf off.
nepos
 2006-06-13 12:55
#10692 #10692
User since
2005-08-17
1420 Artikel
BenutzerIn
[Homepage] [default_avatar]
Leider gibts aber immer noch PHP-Anwendungen, die register_globals=on brauchen...
Ausserdem: fuer den Anfaenger isses so doch schoen praktisch :p
jan
 2006-06-13 14:45
#10693 #10693
User since
2003-08-04
2536 Artikel
ModeratorIn
[Homepage] [default_avatar]
daher sollte man dann auf solche anwendungen lieber verzichten, was anderes nehmen oder sie selbst implementieren. dauert länger, kostet mehr. aber auch wenn man mir für jede backdoor, die ich auf meinem server installiere, 5 euro gibt, werde ich's nicht tun.

auf den meisten servern, die ich betreue, ist php einfach gar nicht installiert und der apache hat anweisung, jeden request, der auf .php endet, direkt umzuleiten auf ein script, das dann temporär die ip vollständig blockt. trotzdem haben wir endlos viele scriptkiddies täglich in den logs, die auf phpbb/joomla/insertphpapp-exploits-jagd sind.
Strat
 2006-06-18 16:52
#10694 #10694
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
@jan: n * 5 Euro.... hmmm, wenn n gross genug ist und du den server ausgeschaltet lassen kannst, warum eigentlich nicht? ;-)
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
jan
 2006-06-18 23:11
#10695 #10695
User since
2003-08-04
2536 Artikel
ModeratorIn
[Homepage] [default_avatar]
ja, schade eigentlich, dass zend php nicht besonders promoten will und geld für jede phpbb-installation zahlt ;)
<< >> 9 Einträge, 1 Seite



View all threads created 2006-06-06 01:03.