Bazı insanlar sadece sürece kullanıcı girişi var gibi "hiçbir zaman" yanıt verebilir biliyorum. Ama ben böyle bir şey olduğunu varsayalım:
$version = $_REQUEST['version'];
$test = 'return $version > 3;';
$success = eval($test);
Bu tabii ki basitleştirilmiş bir durumdur, ancak bir kullanıcı version
Bu zararlı bir şey yapmak için giriş almak için bir şey var mı? I $test
diğer değişkenlere bazı değişkenlerin değerini karşılaştırarak alabilir dizeleri türünü kısıtlamak değilse, herkes o yararlanmaya görebilirsiniz herhangi bir yolu var mı?
Edit
Ben sunucu üzerinde aşağıdaki komut dosyası çalıştırarak denedim ve hiçbir şey olmuyor:
<?php
$version = "exec('mkdir test') + 4";
$teststr = '$version > 3;';
$result = eval('return ' . $teststr);
var_dump($result);
?>
Ben olsun hepsi bool(false)
. Yeni dizin oluşturulur. Aslında exec('mkdir test')
daha önce çağıran bir çizgi varsa, aslında dizin yaratır. Bu sadece başka bir numaraya sayıya dönüştürülmüş bir dize karşılaştırma ve sonuç yanlış olduğunu bulmaya var olmasıyla, düzgün çalışıyor gibi görünüyor.