Kullanıcı eklenen değişkenler ile exec komutunu sterilize etmek için en iyi yolu

2 Cevap php

Ben firmamız kullandığı yatıştırıcı yazılım korkunç bir parça için bir web arayüzü kodlama ediyorum. Yazılım gerçek bir kullanıcı arayüzü vardır ve hatta veri çekmek için müşterilerimiz için bizim sisteme macun erişim sağlayarak bize gerektirir. ; Benim web arayüzü bir exec çalıştırmak için () vardır işlev ve birkaç değişkenleri kullanıcı girişleri geçmek zorunda.

$command = "report-call '$type' '$study' '$server' '$tag' '$specopt1' '$specopt2' '$specopt3' '$specopt4'";
$last_line = exec($command, $output, $returnvalue);

Şimdi ben sadece $ komut variblenin herhangi simicolins kaldırmak ve güvenli olması mümkün olabilir, ama emin değil im ve burada bu poz im biz canlı önümüzdeki ay geçmeden önce, neden şu olabilir varsayalım.

Ne $ komutu sterilize etmek için en iyi yolu olurdu? I [] değişkenleri olması gerekiyor birkaç özel karakter ! # $.

2 Cevap

PHP bu amaçla sahip işlevini kullanın:

$cmd = 
     "/usr/bin/do-something " . 
     escapeshellarg($arg1) . 
     ' ' . 
     escapeshellarg($arg2);

Da kullanabilirsiniz escapeshellcmd()

What's the difference?

escapeshellarg() ONLY adds ' around the string and then \ before any other ' characters. http://www.php.net/escapeshellarg

escapeshellcmd() escapes all shell-sensitive characters ($, \, etc..) but does not add quotes. http://www.php.net/manual/en/function.escapeshellcmd.php

Yakaladım A QUOTED parametresinin parçası olarak escapeshellarg() kullanmak durumunda olduğunu. Sonra (aslında karıştırmak için tırnak ekleyerek) işe yaramaz hale getirmektedir.

Genel olarak konuşursak, biz kendi tırnak ile escapeshellcmd() kullanmayı tercih ekledi.

$cmd = 
    "/usr/bin/do-something '" . 
    escapeshellcmd($arg1) . 
    "' '" . 
    escapeshellcmd($arg2) . 
    "'";

Be safe!

Burada PHP değişkenleri dezenfektan hakkında bir bütün makale:

http://website-security.info/sanitize-php-variables