php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2007

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 10.02.2007, 01:47  
Erfahrener Benutzer
 
Registriert seit: 05.09.2004
Beiträge: 106
PHP-Kenntnisse:
Fortgeschritten
MaMo-Net
Standard Funktion escapeshellcmd emulieren

Hallo,

habe mir eben die Funktion escapeshellcmd() selber geschrieben, da sie bei einigen PHP-Installationen deaktiviert ist:
PHP-Code:
<?php
error_reporting
(E_ALL);

/**
 * Escape shell metacharacters.
 *
 * This function escapes any characters in a string that might be used to trick
 * a shell command into executing arbitrary commands. This function should be
 * used to make sure that any data coming from user input is escaped before this
 * data is passed to the exec() or system() functions, or to the backtick
 * operator.
 *
 * Following characters are preceded by a backslash: #&;`|*?~<>^()[]{}$\, \x0A
 * and \xFF. ' and " are escaped only if they are not paired.
 *
 * In Windows, all these characters plus % are replaced by a space instead.
 *
 * @param string The command that will be escaped.
 * @return string The escaped string.
 * @todo ' and " should be escaped only if they are not paired.
 * @author Matthias Mohr, [url]http://www.mamo-net.de[/url]
 * @see [url]http://www.php.net/escapeshellcmd[/url]
 */
function escapeshellcmd2($cmd) {
    
// 92 has to be the first for non windows systems!
    
$chars = array(92,10,34,35,36,38,39,40,41,42,59,60,62,63,91,93,94,96,123,124,125,126,255);
    
$chars array_map('chr'$chars);

    if (
strtoupper(substr(PHP_OS03)) == 'WIN' || empty($_ENV['windir']) == false) {
        
$chars[] = chr(37);
        
$cmd str_replace($charschr(32), $cmd);
    }
    else {
        foreach(
$chars as $char){
            
$cmd str_replace($charchr(92).$char$cmd);
        }
    }

    return 
$cmd;
}

$chr $chr1 $chr2 implode(''array_map('chr', array(10,34,35,36,37,38,39,40,41,42,59,60,62,63,91,92,93,94,96,123,124,125,126,255)));
$chr1 escapeshellcmd($chr1);
$chr2 escapeshellcmd2($chr2);
if (
$chr1 == $chr2) {
    echo 
"Die Funktionen scheinen gleich zu arbeiten!
"
;
}
else {
    echo 
"Es wurde ein Unterschied gefunden!
"
;
    echo 
"Unterschied:
"
;
    echo 
"<code>Orig.:";
    for (
$i 0$i strlen($chr); $i++) {
        echo 
ord($chr{$i}).' ';
    }
    echo 
"
PHP..:"
;
    for (
$i 0$i strlen($chr1); $i++) {
        echo 
ord($chr1{$i}).' ';
    }
    echo 
"
Class:"
;
    for (
$i 0$i strlen($chr2); $i++) {
        echo 
ord($chr2{$i}).' ';
    }
    echo 
"</code>
"
;
}
var_dump($chr1 == $chr2);
?>
Außerdem, wie in der Doku (bei @todo) zu lesen, stand in der Doku zu dieser Funktion:
Zitat:
' and " should be escaped only if they are not paired
Ich weiß gerade irgendwie nicht, wie ich das implementieren soll. Hat jemand einen Vorschlag und kann mir helfen? Ist die Funktion sonst soweit korrekt? Würde mich über Kommentare etc. freuen. Man könnte nach dem Umwandeln \"\" bzw. \'\' (jedoch nur bei der non-Windows-Variante) wieder zurück ersetzen. Finde das jedoch unsauber und evtl. ersetzt er auch zu viel, oder? Außerdem fehlt dann noch eine Möglichkeit für Windows-Systeme.

Die Funktion habe ich getestet unter Windows und Linux. Das hat soweit auch funktioniert, jedoch würde ich gerne noch die Ergebnisse für andere Systeme sehen. Könnte das mal jemand testen? (Test generell erledigt)

MfG MaMo
MaMo-Net ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

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

Alt 07.03.2007, 15:55  
Erfahrener Benutzer
 
Registriert seit: 05.09.2004
Beiträge: 106
PHP-Kenntnisse:
Fortgeschritten
MaMo-Net
Standard

Hat niemand was dazu zu sagen? Schade...
MaMo-Net ist offline  
Alt 07.03.2007, 17:04  
Erfahrener Benutzer
 
Benutzerbild von phpdummi
 
Registriert seit: 06.06.2008
Beiträge: 1.631
PHP-Kenntnisse:
Anfänger
phpdummi ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Die Funktion habe ich getestet unter Windows und Linux. Das hat soweit auch funktioniert, jedoch würde ich gerne noch die Ergebnisse für andere Systeme sehen. Könnte das mal jemand testen?
apple is doch auch unix oder? von daher is das egal. bei mir (windows) kommt auch "Die Funktionen scheinen gleich zu arbeiten! bool(true)" ... was willst du denn noch wissen?
__________________
"Nobody is as smart as everybody" - Kevin Kelly
— The best things in life aren't things
phpdummi ist offline  
Alt 07.03.2007, 17:13  
Erfahrener Benutzer
 
Registriert seit: 05.09.2004
Beiträge: 106
PHP-Kenntnisse:
Fortgeschritten
MaMo-Net
Standard

Hi,

es geht mir vorrangig um die Implementation von diesem:
Zitat:
' and " should be escaped only if they are not paired
. Dazu steht mehr im letzten Absatz des Textes...

Off-Topic: MacOS basiert auf Unix? Wäre mir neu?!

MfG MaMo
MaMo-Net ist offline  
Alt 07.03.2007, 17:26  
Erfahrener Benutzer
 
Benutzerbild von phpdummi
 
Registriert seit: 06.06.2008
Beiträge: 1.631
PHP-Kenntnisse:
Anfänger
phpdummi ist zur Zeit noch ein unbeschriebenes Blatt
Standard

hast du das wirklich selbst geschrieben? ansonnsten gibt es viele gute validator klassen. ich finde es unsinnig alle zeichen zu escapen etc.
__________________
"Nobody is as smart as everybody" - Kevin Kelly
— The best things in life aren't things
phpdummi ist offline  
Alt 07.03.2007, 17:31  
Erfahrener Benutzer
 
Registriert seit: 05.09.2004
Beiträge: 106
PHP-Kenntnisse:
Fortgeschritten
MaMo-Net
Standard

Hi, sicher habe ich das selber geschrieben Wenn du eine Klasse o.Ä. kennst die die Funktion von escapeshellcmd() übernimmt, dann zeige Sie mir bitte - wäre sehr dankbar. Ich habe Stunden danach gesucht und keine gefunden. Und was hat das damit zu tun alle Zeichen zu escapen? Ich will nur die Eingaben für grep, exec o.Ä. validieren.
MaMo-Net ist offline  
Alt 07.03.2007, 17:58  
Erfahrener Benutzer
 
Benutzerbild von phpdummi
 
Registriert seit: 06.06.2008
Beiträge: 1.631
PHP-Kenntnisse:
Anfänger
phpdummi ist zur Zeit noch ein unbeschriebenes Blatt
Standard

"reden" wir aneinander vorbei?
ich versteh das jetzt so: du rufst per exec(); irgendwas auf deinem system auf.
exec($cmd); und nun willst du das dort niemand code einschleusen kann?
__________________
"Nobody is as smart as everybody" - Kevin Kelly
— The best things in life aren't things
phpdummi ist offline  
Alt 07.03.2007, 18:01  
Erfahrener Benutzer
 
Registriert seit: 05.09.2004
Beiträge: 106
PHP-Kenntnisse:
Fortgeschritten
MaMo-Net
Standard

Hi,

ich möchte einfach die Funktion escapeshellcmd() gemäß der API (http://php.net/escapeshellcmd) emulieren, weil auf vielen Systemen diese Funktion deaktiviert ist. Wofür ich das später brauche ist eigentlich egal und wieso die Funktion deaktiviert ist steht auch nicht zur Debatte.

MaMo
MaMo-Net ist offline  
Alt 07.03.2007, 18:20  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

Mach mir mal ein paar Beispiele in denen so ein loses Anführungszeichen vorkommt, bin grade nicht kreativ genug mir ein gültiges Shell-Kommando dieser Art auszudenken.
Zergling-new ist offline  
 


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
JS: Einführung - Javascript im Schichtenmodell nikosch Tutorials 4 11.04.2009 17:06
Rekursive Funktion bricht ab... duras666 PHP Tipps 2008 9 28.04.2008 11:36
gpc_quotes funktion: verbesserungsvorschläge? Promaetheus PHP Tipps 2007 10 12.08.2007 19:29
Komplexe Funktion: +Übersichtlichkeit, -Performance Jacks Rache PHP Tipps 2006 3 07.06.2006 14:22
[Erledigt] Zugriff auf eine Klasse innerhalb einer Funktion -&amp;amp;gt; Fehle PHP-Fortgeschrittene 23 05.02.2006 13:02
PHP-GTK Tutorial Beitragsarchiv 9 02.11.2005 21:07
Rückgabewert einer rekrusiven Funktion PHP-Fortgeschrittene 7 06.10.2005 18:44
(schnellere) Funktion zum Zusammenfassen von CSS PHP-Fortgeschrittene 21 08.08.2005 16:47
In einer Funktion auf eine Funktion der Klasse zugreifen phpbeginner PHP Tipps 2005-2 2 28.07.2005 00:30
Funktion in einer Funktion aufrufen? PHP Tipps 2005-2 11 14.06.2005 15:14
[Erledigt] Array-Übergabe in Funktion PHP Tipps 2005 1 08.05.2005 21:05
[Erledigt] Kein Ausführen der Funktion PHP Tipps 2005 2 27.03.2005 16:56
[Erledigt] Wie kann ich beliebig viele Werte an eine Funktion übergeben PHP Tipps 2005 11 25.01.2005 10:44
[Erledigt] sql syntax error in funktion, kann aber nix finden :( PHP Tipps 2004 10 20.07.2004 19:19
[Erledigt] Referenz auf Funktion übergeben PHP-Fortgeschrittene 7 20.07.2004 09:51

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
escapeshellcmd, escapeshellcmd2, escapeshellcmd hochkomma, escapeshellcmd win, bash escapeshellcmd, escapeshellcmd url, escapeshellcmd deaktiviert, bash unter windows emulieren

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

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