php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger

PHP Einsteiger PHP Problemlösungen für Spracheinsteiger
Archive: 2004, 2004/2, 2005, 2005/2, 2006, 2007, 2008, 2009, 2010,

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 28.01.2012, 18:23  
Neuer Benutzer
 
Registriert seit: 13.10.2011
Beiträge: 29
PHP-Kenntnisse:
Anfänger
zwergchen1 befindet sich auf einem aufstrebenden Ast
Standard [Erledigt] url mit GET durch escapeshellcmd()?

hallo,
wenn ich eine URL mit _GET parametern durch escapeshellcmd() ziehe, wird leider zu viel escaped, weil das "?" und die "&" escaped werden, wodurch wiederum wget mit der URL nichts mehr anfangen kann.

PHP-Code:
$_POST array_map('escapeshellcmd'$_POST);

exec("/usr/bin/wget '".$_POST["url"]."' -o test.log"); 
auf escapeshellcmd() wollte ich eiglt nicht verzichten, weil ich sonst angst vor einer injection hab. was nun?

danke
zwergchen1 ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

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

Alt 28.01.2012, 18:27  
Erfahrener Benutzer
 
Benutzerbild von Dark Guardian
 
Registriert seit: 10.10.2009
Beiträge: 2.631
PHP-Kenntnisse:
Fortgeschritten
Dark Guardian ist jedem bekanntDark Guardian ist jedem bekanntDark Guardian ist jedem bekanntDark Guardian ist jedem bekanntDark Guardian ist jedem bekanntDark Guardian ist jedem bekannt
Standard

CMD (Befehl)
http://www.php.net/manual/de/functio...peshellcmd.php

VS

ARG (Argument)
http://www.php.net/manual/de/functio...peshellarg.php
__________________
"Alles im Universum funktioniert, wenn du nur weißt wie du es anwenden musst".
Dark Guardian ist offline   Mit Zitat antworten
Alt 28.01.2012, 18:48  
Neuer Benutzer
 
Registriert seit: 13.10.2011
Beiträge: 29
PHP-Kenntnisse:
Anfänger
zwergchen1 befindet sich auf einem aufstrebenden Ast
Standard

ich hab mir jetzt mehrfach die beiden beschreibungen auf php.net durchgelesen, aber ich versteh das irgendwie nicht richtig.

reicht es demnach wenn ich es NUR mit escapeshellarg() behandle?
zwergchen1 ist offline   Mit Zitat antworten
Alt 28.01.2012, 19:06  
Erfahrener Benutzer
 
Benutzerbild von Dark Guardian
 
Registriert seit: 10.10.2009
Beiträge: 2.631
PHP-Kenntnisse:
Fortgeschritten
Dark Guardian ist jedem bekanntDark Guardian ist jedem bekanntDark Guardian ist jedem bekanntDark Guardian ist jedem bekanntDark Guardian ist jedem bekanntDark Guardian ist jedem bekannt
Standard

Zitat:
Zitat von zwergchen1 Beitrag anzeigen
ich hab mir jetzt mehrfach die beiden beschreibungen auf php.net durchgelesen, aber ich versteh das irgendwie nicht richtig.

reicht es demnach wenn ich es NUR mit escapeshellarg() behandle?
Um es verstehen zu können musst du wissen wie die Shell Befehlsargumente behandelt.

Zitat:
escapeshellcmd() maskiert alle möglichen Zeichen in einer Zeichenkette
Zitat:
escapeshellarg() fügt einfache Anführungszeichen um eine Zeichenkette herum ein und maskiert alle existierenden einfachen Anführungszeichen innerhalb der Zeichenkette
Das ist der zentrale Unterschied.

Laut den User Kommentaren interpretiert die Unix Shell nichts als Befehl was in Single Quotes geschrieben wurde. Das gewährleistet escapeshellarg.

Code:
Aus

exec("/usr/bin/wget EINGABE -o test.log");

mit "http://...'; echo 'hello'" als Eingabe würde werden

exec("/usr/bin/wget 'http://...\'; echo \'hello\'' -o test.log");
__________________
"Alles im Universum funktioniert, wenn du nur weißt wie du es anwenden musst".
Dark Guardian ist offline   Mit Zitat antworten
Alt 28.01.2012, 19:18  
Neuer Benutzer
 
Registriert seit: 13.10.2011
Beiträge: 29
PHP-Kenntnisse:
Anfänger
zwergchen1 befindet sich auf einem aufstrebenden Ast
Standard

ich glaub der groschen ist gefallen.

escapeshellarg() setzt einmal anführungszeichen drumherum, damit nicht ausgebrochen werden kann. außerdem escaped escapeshellarg() alle gefährlichen befehle innerhalb des strings, damit nicht aus den anführungszeichen ausgebrochen werden kann, demnach reicht bei argumenten bzw strings escapeshellarg() völlig aus. richtig?

sorry für die schwere geburt.


edit, also wäre es so richtig:
PHP-Code:
exec("/usr/bin/wget ".escapeshellarg($_POST["url"])." -o test.log"); 

Geändert von zwergchen1 (28.01.2012 um 19:23 Uhr).
zwergchen1 ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

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

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Funktion escapeshellcmd emulieren MaMo-Net PHP Tipps 2007 8 07.03.2007 18:20


Alle Zeitangaben in WEZ +2. Es ist jetzt 21:42 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