0

3 つの入力フィールドを持つフォームがあるとします。

  • 総額
  • 付加価値税率
  • 正味金額

ユーザーは、総額付加価値税率フィールドに入力できます。正味金額フィールドが設定されますreadonly

ここで、JavaScript で正味金額を計算し、必要なフィールドに入力して、この値をデータベースに渡すことで、時間を節約し、パフォーマンスを向上させたいと考えています。

私が確認する唯一のことは、 Symfony NotBlank 制約などで正味金額フィールドが空であるかどうかです。

JavaScriptの計算値を取得するのは悪い習慣ですか?

4

2 に答える 2

3

ここには 3 つの危険があります。

  • 悪意のあるコードの挿入

これは、ユーザーが直接入力した内容を画面に表示するか、ユーザーがデータを改ざんした別の画面に表示することによって発生します。たとえば、ユーザーは名前の<script>alert('You got hacked!');</script>代わりに名前とタイプを求められます。プロファイルを表示するすべてのユーザーは、このコードを確認します。確認しないと、確認したすべてのユーザーのマシンで実行される可能性があります。

これは、ユーザーが入力したデータを最初にチェックせずに表示するページがシステムにある場合に発生します。この場合、おそらくデータベースからの現在の値を表示するページです。

ユーザーが入力したものをサニタイズするか、データベースから出る途中でチェックすることで、この状況を回避できます。

ただし、あなたの状況では、値を文字列ではなく数値としてデータベースに保存しても問題はありません。

  • JavaScript での値の操作

ただし、はるかに大きな問題があります。それは、サーバー側で計算を実行する必要があるということです。ユーザーは、正味金額の値を操作して、必要なものをデータベースに送信することができます。

たとえば、ユーザーがオンライン ストアから何かを購入していて、それぞれが 1.00 ポンドの商品を 5 つカートに追加した場合、JavaScript で合計 (5.00 ポンド) を計算し、それを送信して保存すると、ユーザーはそれを編集して合計を£0に変更し、アイテムを無料で入手できます。

セキュリティのために、もちろんサーバーでコストを計算し、データベースから個人的に取得した値を使用する必要があります。バックエンドでユーザーから送信されたデータを再利用しないでください。個々のアイテムのコストを編集することもできるからです。 0も。

  • Javascript 数値の精度

おまけとして、数値を加算および乗算する場合、フロントエンドとバックエンドで値の計算が異なる場合があることにも注意してください。次のコードを検討してください。

var total = 0.3 - 0.2;

合計が 0.1 であると予想する場合は、間違っています。答えは 0.99999999998 のようになります。

Javascript は浮動小数点数を正確に処理しません。

于 2017-01-27T08:31:01.683 に答える