array ( 0 => 'index.php', 1 => 'PHP Manual', ), 'head' => array ( 0 => 'UTF-8', 1 => 'tr', ), 'this' => array ( 0 => 'function.escapeshellcmd.php', 1 => 'escapeshellcmd', ), 'up' => array ( 0 => 'ref.exec.php', 1 => 'Program Çalıştırma İşlevleri', ), 'prev' => array ( 0 => 'function.escapeshellarg.php', 1 => 'escapeshellarg', ), 'next' => array ( 0 => 'function.exec.php', 1 => 'exec', ), 'alternatives' => array ( ), 'source' => array ( 'lang' => 'tr', 'path' => 'reference/exec/functions/escapeshellcmd.xml', ), ); $setup["toc"] = $TOC; $setup["toc_deprecated"] = $TOC_DEPRECATED; $setup["parents"] = $PARENTS; manual_setup($setup); ?>
(PHP 4, PHP 5, PHP 7, PHP 8)
escapeshellcmd — Kabuk özel karakterlerini önceler
escapeshellcmd() işlevi, içinde keyfi komutlar çalıştırarak bir kabuk komutunu kandırmak için kullanılabilecek bir dizgenin içerdiği karakterleri önceler. Bu işlev, exec() veya system() işlevlerine ya da çalıştırma işlecine aktarılmadan önce kullanıcı girdisi olarak alınan veriyi öncelemek için kullanılmalıdır.
Bir tersbölü çizgisi ile öncelenen karakterler şunlardır:
&#;`|*?~<>^()[]{}$\
, \x0A
ve \xFF
. '
ve "
karakterleri sadece çiftler halinde değilse öncelenir. Windows'a tüm
bu karakterlere ek olarak %
ve !
imleri bir şapka imi (^
) ile öncelenir.
komut
Öncelenecek komut dizgesi.
Öncelenmiş komut dizgesi.
Örnek 1 - escapeshellcmd() örneği
<?php
// Burada bilerek keyfi sayıda bağımsız değişkene izin veriyoruz.
$komut = './configure '.$_POST['configure_options'];
$öncelenen_komut = escapeshellcmd($komut);
system($öncelenen_komut);
?>
escapeshellcmd() komut dizgesinin tamamı üzerinde kullanılmalıdır. Buna rağmen saldırganın keyfi sayıda bağımsız değişken aktarmasına izin verir. Tek bir bağımsız değişkeni öncelemek için bu işlev yerine escapeshellarg() kullanılmalıdır.
Windows üzerinde
C:\Program Files\ProgramName\program.exe
gibi yollarda sorunlu olan escapeshellcmd()
boşlukları öncelemez. Aşağıdaki kod parçası kullanılarak bu sorun
ortadan kaldırılabilir:
<?php
$cmd = preg_replace('`(?<!^) `', '^ ', escapeshellcmd($cmd));