2011-12-11 86 views
0

(請注意,這是用戶輸入的,所以我無法對其進行硬編碼)。無論如何,用戶輸入math.php?do = 2 + 2,腳本將作爲結果返回4。另一件事是輸入是嚴格驗證的,所以沒有惡意的可能性。我的測試方法是這樣的PHP:我有一個字符串,它有一個數學運算。我如何運行它?

function testMath($char){ 
    $array['math'] = Array("+", "-", "/", "*", "(", ")", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9"); 
    foreach($char as $chr){ 
     if(!in_array($chr, $array['math'){ 
      return false; 
     } 
    } 
    return true; 
} 

eval()檢查的東西是否安全?或者我應該忘記從用戶輸入的輸入做數學?

側面說明,PHP拋出

Parse error: parse error in C:\Users\Josh\Desktop\App\html\new.php(24) : eval()'d code on line 1 

當我嘗試eval()的東西。怎麼了?

+5

爲什麼你不只是做用戶的使用javascript結束數學?方式風險較小 –

+0

如果在用戶輸入中完成'eval',則會出現一些明顯的安全問題。您的測試看起來沒問題,但您也可能想限制長度。當你叫'eval'時,它看起來像什麼? –

+1

或者使用已經被創建的東西:http://stackoverflow.com/questions/1015242/how-to-evaluate-formula-passed-as-string-in-php – NightHawk

回答

1

我不確定你是如何使用eval(),因爲你沒有發佈你的代碼的一部分。但是,如果你要EVAL代碼,你需要指定變量將被保存到:

修訂testMath:

function testMath($char){ 
    if(strlen($char) > 10) return false; 
    $array['math'] = Array("+", "-", "/", "*", "(", ")", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9"); 
    foreach($char as $chr){ 
     if(!in_array($chr, $array['math'){ 
      return false; 
     } 
    } 
    return true; 
} 

$math = $_GET['do']; 
if(testMath($math)) eval("$result = " . $math . ";"); 

echo $math, ' = ', $result; 
+1

'$ sanitizedUserInput'需要海拉消毒。 – Dan

+0

上面提供的testMath()函數可能已經足夠了......我會在前面提到的tandu中添加一個字符限制。 – dchrastil

+0

@Bracketworks +1「hella」 – rockerest

相關問題