2017-04-07 5 views
-1

テーブルのカスタム検索を行っています。 from、to、statusの3つの検索パラメータがあります。私はeval()を使用して、受信したパラメータに従って結果をフィルタリングしています。evalのソリューション

$search = ($from != "" || $to != "" || $status != ""); 



if ($search) { 
    if ($from != '') { 
     $condition[] = '$from == $res["from_number"]'; 
    } 
    if ($to != '') { 
     $condition[] = '$to == $res["to_number"]'; 
    } 

    if ($status != '') { 
     $condition[] = '$status == $log["status"]'; 
    } 

    $search = "if(" . implode(' && ', $condition) . '){ return false; } else { return true; }'; 
} 

条件を取得した後、私は私がeval()を使用したくないされてeval

if (eval($search)) { 

} 

私の問題を使用しています。以下は、私のコードです。セキュリティ上の問題が発生する可能性があります。それ以外の場合は不可能なはしご、それは非常に長いです。他の解決策?

- それは潜在的に危険である

if($from == $res["from_number"] && $to == $res["to_number"]) { 
} 
+2

なぜあなたも最初の場所ではevalを使用していますか?なぜ '$ search'をコードとして解釈する必要がありますか? – Carcigenicate

+2

3つのパラメータは大したことではありません。 –

+0

質問をあなたの入力と期待される出力に更新してください。 – mkaatman

答えて

1

evalを使用しないでください:私はステータスの値を渡した場合、私は数から&に合格した場合、それはようにする必要があり

if($status == $log["status"]) { 
} 

のようにチェックしたいです使用することはお勧めしません。

あなたのコードは次のようになります

$result = false; 
if ($from != "" || $to != "" || $status != "") { 
    if ($from != '' && $from != $res["from_number"]) $result = true; 
    if ($to != '' && $to != $res["to_number"]) $result = true; 
    if ($status != '' && $status != $log["status"]) $result = true; 
}   

if ($result) { 
    // ........ 
} 
+0

問題の例を確認してください。 – Omi