1

私は eval について非常に多くの悪いことを聞いたので、一度も使用しようとさえしませんでした。しかし、今日、それが正しいと思われる状況があります。

変数を組み合わせて簡単な計算を実行できるスクリプトが必要です。たとえば、value=5 で max=8 の場合、value*100/max を評価したいとします。値と式の両方が外部ソースから取得されるため、eval に関心があります。

サンプルコードを使用して jsfiddle デモをセットアップしました。

http://jsfiddle.net/6yzgA/

値は parseFloat を使用して数値に変換されるため、ここではかなり安全だと思います。数式内の文字は、次の正規表現と再び一致します。

regex=/[^0-9\.+-\/*<>!=&()]/, // allows numbers (including decimal), operations, comparison

私の質問:

  • 正規表現フィルターはあらゆる攻撃から私を守ってくれますか?
  • この場合、eval と new Function を使用する理由はありますか?
  • 数式を評価する別のより安全な方法はありますか?
4

2 に答える 2

3

サーバーに何も送信したり、他の誰かのシステムで何かを使用したりしていないため、起こりうる最悪の事態は、ユーザーが自分のブラウザーをクラッシュさせることです。evalすべてがユーザー側で行われるため、ここでの使用に危険はありません。

于 2012-09-27T18:08:02.123 に答える
0

クライアント側で何かをエスケープして防止することは、まったく意味がありません。ユーザーは、投稿したjsfiddleを変更できるのと同じくらい簡単に、JSコードの任意の部分を変更して実行できます。私を信じてください、それはとても単純で、クライアント側のセキュリティに頼ることはできません.

サーバー側で入力フィールドをエスケープすることを覚えていれば、心配する必要はありません。使用している言語に応じて、デフォルトでそのための関数がたくさんあります。

ユーザーが入力したい場合は、入力<script>haxx(l33t);</script>させてください。特殊文字をエスケープすることを忘れないでください&lt;script&gt;haxx(l33t);&lt;/script&gt;

于 2012-09-27T18:26:07.733 に答える