1

私は明確な答えを探してインターネット上の多くのスレッドや質問に目を通しましたが、これまでのところ何も得られていません.

質問の一部は既に回答されています (間違っていると言わない限り)。データの検証は、クライアント側とサーバー側で行う必要があります。クライアント側は、無効なデータをユーザーに通知し、サーバーをオフロードし、サーバー上であらゆる種類の攻撃を防ぎます。

ただし、両側で検証するのは面倒な作業になる可能性があり、重複したコードがあまりないようにそれを行う方法があるかどうか疑問に思いました.

他にも疑問に思っていたことがあります...その行の(データベースの)IDを含む行を持つテーブルがあります。各行の最後に、html から削除するための削除ボタンがあります。値の配列を含み、データベースから削除される ajax 呼び出しに送信される JSON オブジェクトです (2 つのテーブル間のリンク)。

これは安全ではありません(インターネットのような安全でない環境では)、私はそれを知っています. IDが数字のみであるかどうかをクライアント側でいつでも確認できます。そうであれば、サーバー側で存在するかどうかを確認します。しかし、ユーザーがデバッガーに入らず、2行を反転させて、そうすべきではない行を削除してしまったと誰が言いますか? ID を保持し、人々が ID を反転させないようにする最善の方法は何でしょうか?

任意の提案をいただければ幸いです

4

3 に答える 3

3

データの検証は、クライアント側とサーバー側で行う必要があります。

クライアント側のIMHOを実行する必要はありません。しかし、データを送信する前にユーザーに通知できると便利です。だから私はそれをプレと呼ぶでしょう。

ただし、両側で検証するのは面倒な作業になる可能性があり、重複したコードがあまりないようにそれを行う方法があるかどうか疑問に思いました.

PHP はサーバー側で、javascript はクライアント側であるため、コードの重複を防ぐのは簡単ではありません。ただし、xhr requestsを使用する方法が 1 つあります。このようにして、javascript (クライアント側) で php 検証を使用できます。

各行の最後に、html から削除するための削除ボタンがあります。

CSRF 保護を使用していることを教えてください。:-)

IDが数字のみであるかどうかをクライアント側でいつでも確認できます。そうであれば、サーバー側で存在するかどうかを確認します。

悪意のある SQL が挿入されるのを防ぐには、準備済みステートメントとパラメーター化されたクエリを使用する必要があります。

于 2012-08-02T14:31:56.953 に答える
2

検証は常にサーバー上で行う必要があります。クライアント側の検証はユーザーの利便性のみを目的としており、セキュリティの観点からは厳密には必要ありません (XSS セキュリティ ホールを開く場合を除く)。

それとは別に、ユーザーから受け取ったすべての入力をサニタイズする必要があります。入力がサニティ チェックに合格した後 (たとえば、数字があるはずのテキストがある場合)、パーミッション テストを行う必要があります (要求されたアクションを実行するための適切なパーミッションがユーザーにあるか? ) 。

これを行った後、実際にトランザクションを実行できます。

于 2012-08-02T14:31:20.473 に答える
0

他の回答が既に投稿されているため、Utility を呼び出すことができるユーティリティ クラスを専用にし、サーバー側でデータ型とコンテンツをチェックするための多くの便利な関数を格納する場所を専用にすることをお勧めします。クライアント側とサーバー側の両方でいくつかの優れた検証を行うことで、少なくともコードはより読みやすく、管理しやすくなります。

独自のユーティリティ クラスを作成して管理するもう 1 つの利点は、それらをすべてのプロジェクトで簡単に使用できることです。

たとえば、ユーティリティ クラスには、特定のフィールドが特定の値の範囲内にあること、特殊文字が含まれていないこと (正規表現を使用) などを検証することなど、さまざまなメソッドを含めることができます。前述のように、スクリプトの挿入、SQL インジェクションの防止について。

全体として、一度作業を行うと、常にその恩恵を受けることができます。年齢フィールドが負であるかどうか、または最初から行うすべてのプロジェクトで何かをチェックし始める必要はないと確信しています。Ajax と XHR を使用すると、サーバー側とクライアント側のコードを橋渡しすることができ、検証を統一して重複を避けることができます。

于 2012-08-02T14:44:11.937 に答える