Warum existiert eval() in PHP?
- hardfalcon
- Beiträge: 3447
- Registriert: 29.08.2004 20:46
Warum existiert eval() in PHP?
Moin, ich weiss natürlich, was der PHP-Befehl eval() macht. Allerdings frage ich mich: Wozu hat man diesen Befehl überhaupt eingeführt? Das einzige sinnvolle Einsatzszenario, das ich mir vorstellen kann, ist, eine Shell zu programmieren, und das sollte ja weiß Gott nicht die Nestimmung von PHP sein...
Kennt hier vielleicht jemand ein Szenario, wo es Sinn macht, eval() zu verwenden? Würde mich echt mal interessieren...
Kennt hier vielleicht jemand ein Szenario, wo es Sinn macht, eval() zu verwenden? Würde mich echt mal interessieren...
Flexiblerer Codegestaltung.
z.B.
->
Stellt natürlich auch ein Sicherheitsrisiko dar...
z.B.
Code: Alles auswählen
mysql_query("SELECT event FROM datenbank WHERE id='1'");
if ($mysql_fetch_array['event']== _mycode_sendmail_){
//mail()
}
Code: Alles auswählen
mysql_query("SELECT code FROM datenbank WHERE id='1'");
//if (irgendwelche sicherheitsabfrage == true){
eval($mysql_fetch_array['code'];
//}
-
- Beiträge: 6291
- Registriert: 29.08.2004 08:37
- Computerausstattung: Hoffentlich bald keine mehr
- Kontaktdaten:
Oder für meinen [php][/php] tag, damit ich in meinem CMS direkt an einer bestimmten Stelle code einfügen kann.
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
ich nutze diese Funktion für kurze einfach php-Tests.
Auf einer URL wird mit eine Textarea ein php-Script von mir geschreiben, dann sende ich dies ab, und lasse es dann mit Eval auusführen. Und muss damit nicht immer eine datei schreiben und hochladen ... spart n menge Zeit
Auf einer URL wird mit eine Textarea ein php-Script von mir geschreiben, dann sende ich dies ab, und lasse es dann mit Eval auusführen. Und muss damit nicht immer eine datei schreiben und hochladen ... spart n menge Zeit

PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
- hardfalcon
- Beiträge: 3447
- Registriert: 29.08.2004 20:46
Wirklich überzeugt hat mich bis jetzt eignentlich nur das mit den [php]-Tags (wobei ich das trotzdem noch relativ kritisch sehe, bei nem ordentlichen CMS sollte man doch nich noch irgendwo PHP-Code einbetten müssen).
TomS: Dein Beispiel scheint mir nicht nur recht synthetisch, sondern v.a. (wie du ja selbst zugibst) sehr unsicher zu sein.
Stargate: Dafür braucht man doch auch kein eval(), man kann den Code ja auch in ner temporären Datei speichern (braucht natürlich ein Verzeichnis mit entsprechend gesetzten Zugriffsrechten), hinter dem Code noch ein unlink("Dateiname.test"); einfügen, und das Script dann mit include("Dateiname.test"); ausführen...
//EDIT: Egal, was solls, wegen mir werden die eh kaum nen Befehl da rausschmeissen, in andern Sprachen gibts ja auch genug unsichere Befehle...
TomS: Dein Beispiel scheint mir nicht nur recht synthetisch, sondern v.a. (wie du ja selbst zugibst) sehr unsicher zu sein.
Stargate: Dafür braucht man doch auch kein eval(), man kann den Code ja auch in ner temporären Datei speichern (braucht natürlich ein Verzeichnis mit entsprechend gesetzten Zugriffsrechten), hinter dem Code noch ein unlink("Dateiname.test"); einfügen, und das Script dann mit include("Dateiname.test"); ausführen...
//EDIT: Egal, was solls, wegen mir werden die eh kaum nen Befehl da rausschmeissen, in andern Sprachen gibts ja auch genug unsichere Befehle...

- Falko
- Admin
- Beiträge: 3535
- Registriert: 29.08.2004 11:27
- Computerausstattung: PC: MSI-Z590-GC; 32GB-DDR4, ICore9; 2TB M2 + 2x3TB-SATA2 HDD; Intel ICore9 @ 3600MHZ (Win11 Pro. 64-Bit),
Acer Aspire E15 (Win11 Home X64). Purebasic LTS 6.11b1
HP255G8 Notebook @AMD Ryzen 5 5500U with Radeon Graphics 2.10 GHz 3.4GHz, 32GB_RAM, 3TB_SSD (Win11 Pro 64-Bit) - Kontaktdaten:
Interessant dazu finde ich hier besonders die Warnung, was man damit
anstellen kann
http://www.php-faq.de/q-string-ausfuehren.html
anstellen kann

http://www.php-faq.de/q-string-ausfuehren.html
- HeX0R
- Beiträge: 3042
- Registriert: 10.09.2004 09:59
- Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win11 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2 + 3 - Kontaktdaten:
Beim Woltlab Burning Board ist es z.B. so, dass sämtliche Board-Templates in der Datenbank liegen und dann per eval() ausgeführt werden.
Da ist dann auch gleich ein Editor integriert, damit man online recht simpel Änderungen an den Templates machen kann.
Ziemlich praktisch und auch sicher.
Da ist dann auch gleich ein Editor integriert, damit man online recht simpel Änderungen an den Templates machen kann.
Ziemlich praktisch und auch sicher.
{Home}.:|:.{Codes}.:|:.{Downloads}.:|:.{History Viewer Online}.:|:.{Bier spendieren}
- hardfalcon
- Beiträge: 3447
- Registriert: 29.08.2004 20:46
IMHO ist grade so etwas ein hohes Sicherheitsrisiko. Ich habe in den letzten Wochen mehrere Internetseiten gesehen, wo man über ne SQL-Injection Zugriff auf die Datenbank hatte. Da die normalen MySQL-User meistens keine FILE-Rechte haben, können die nicht einfach irgendein PHP-Script mit beliebigem Code auf dem Webserver speichern, ihre eigenen Tabellen können diese Benutzer aber natürlich verändern. Und genau hier liegt das Problem: Wenn jetzt ein CMS oder ein Forum irgendwo ne SQL-Injection auftaucht (und das ist in der Vergangenheit auch schon beim Woltlab-BB vorgekommen), kann der Angreifer über die DB ja beliebigen PHP-Code zur Ausführung bringen. Natürlich ist das nicht in erster Linie ein Problem von PHP sondern eins von unverantwortllichen Programmierern der jeweiligen Webanwendug, aber das Resultat ist das gleiche: Auf dem angegriffenen Server kann der Angreifer nicht nur die Datenbank auslesen, sondern auch noch eigenen PHP-Code ausführen.
- HeX0R
- Beiträge: 3042
- Registriert: 10.09.2004 09:59
- Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win11 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2 + 3 - Kontaktdaten:
Es kommt ja immer darauf an, was du anbieten willst.
Wenn du deinen Boardkäufern eine komfortable Möglichkeit bieten willst, das Board nach Herzenslust den eigenen Bedürfnissen anzupassen ist das in jedem Fall eine sichere Methode (tatsächlich im Normalfall "nur" durch Injections aushebelbar, die Löcher musst du dann natürlich versuchen zu stopfen).
Sicherer ist natürlich fixe Dateien in Ordnern ohne Schreibrechte, die die User dann eben per ftp hin- und herschieben müssen.
Aber wer Angst vor sql-injections hat, der hat sich bestimmt auch Alufolie um den Kopf gewickelt.
Wenn du deinen Boardkäufern eine komfortable Möglichkeit bieten willst, das Board nach Herzenslust den eigenen Bedürfnissen anzupassen ist das in jedem Fall eine sichere Methode (tatsächlich im Normalfall "nur" durch Injections aushebelbar, die Löcher musst du dann natürlich versuchen zu stopfen).
Sicherer ist natürlich fixe Dateien in Ordnern ohne Schreibrechte, die die User dann eben per ftp hin- und herschieben müssen.
Aber wer Angst vor sql-injections hat, der hat sich bestimmt auch Alufolie um den Kopf gewickelt.

{Home}.:|:.{Codes}.:|:.{Downloads}.:|:.{History Viewer Online}.:|:.{Bier spendieren}