Nasıl güvenli php eval kullanabilir?

0 Cevap php

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.

0 Cevap