ユーザーが入力するフォームがあり、JavaScript を使用して入力を検証します (たとえば、パスワード フィールドが空白になっていないことを確認します)。JavaScript はクライアント側でコンパイルされていないため、誰でも簡単にいじることができます。これは、ユーザーからのデータをサーバー上で再度検証する必要があるということですか? はいの場合、JavaScript が (理論的には) 既にそれを行っているため、より効率的にする方法はありますか?
7 に答える
はい、サーバー上のデータを検証する必要があります。これは、エンド ユーザーがクライアント側でデータを台無しにする可能性があるためです。
はいの場合、JavaScript が (理論的には) 既にそれを行っているため、より効率的にする方法はありますか?
クライアント側の検証を行うことで検証のための多くのラウンドトリップを回避できるため、サーバー側の検証のみを行うよりもすでに効率的です (データを送信する必要があるのは 1 回だけで、検証が不完全または無効になっていない限り、すぐに通過します)。ユーザーエクスペリエンスも向上します。
サーバー側の検証をなくすことはできません (データを気にする場合)。データが同じユーザーにのみ返され、他の場所で表示または使用されない場合 (およびシステム上で何かを壊す可能性がない場合)、これを少し緩和できます。極端な例として、Dropbox はおそらくどのファイルをアップロードするかを気にしないため、アップロードした HTML に悪意のある Javascript が含まれているかどうかを検証しません。
マウスをクリックするだけで、ページ上の JavaScript を無効にすることができます。HTML フォームを完全にバイパスして、データをサーバーに直接送信することもできます。
たとえば、$_GET
I を使用してデータを取得すると、アドレス バーをいじるだけでフォーム (および JavaScript の検証) をバイパスできます。を使用してもこれが変わるとは思わないでください$_POST
。HTTP リクエストを書くだけの問題です。
だから、はい...たとえjavascriptでサニタイズされたとしても、ユーザー入力を決して信用しないでください。
誰かが上に投稿したように、javascript 検証は正当なユーザー エラーを防ぐことができます (したがって、間違ったデータがサーバーに送信されてからユーザーに返されるトリップを保存します) が、悪意のあるユーザーは非常に簡単にそれをバイパスできます。
短い答え: はい、いつでも!
PDO、SQL インジェクション、UUID、トークン、MD5、SHA、クロスサイト リクエスト フォージェリについてお読みください。まったく新しい世界を発見できます。:) 私はそれを良い意味で意味します。これについて学ぶと、より安全なウェブサイトを構築できます
ユーザー入力データを信用しないでください。一度もない。したがって、サーバー側で追加の検証プロセスを実行する必要があります。
そのとおり。サーバーに再投稿する前に、誰かがフォームを傍受して値を変更する可能性があります。
ユーザーは確かに JavaScript を無効にすることができます。ソースコードがすぐそこにあるので、いじるのも非常に簡単です。ユーザーは任意の JS を実行することもできるため、自分のものを簡単にいじることができます。
したがって、サーバー側の検証も常に行う必要があります。クライアント側の検証は、ユーザーにとって便利な情報としてのみ使用する必要があります。唯一のセキュリティ ソースとして信頼しないでください。
はい、安全のために、サーバー側の検証を追加する必要があります。
クライアント側で行われることが期待されるものは何も保証されていないため、重要なことはすべて繰り返す必要があります。
さらに、サーバー側で評価され、クライアント側では評価されない可能性が高いものがあります。SQL インジェクションのチェックなどは、このカテゴリに分類されます。