2

現在、 jQueryバリデータープラグインに基づいてフォーム検証スクリプトを作成しています。そのため、最小長、最大長、必須などの単純な構成が簡単になりました。
その後、クライアント側からユーザー名/電子メールで可用性を確認することにしたのでremote、オプションIを使用する必要がありました。ルール配列を作成するときに指定する必要があります。そのため、ルールを作成するときに、データをphpスクリプトに送信し、入力フィールドが使用可能かどうかを確認する必要がありました。

ただし、複数の入力フィールドの可用性を確認するため、すべてのフィールドで再利用する関数を(クライアント側で)作成しました。この関数には、入力フィールドのIDとMySQLテーブルの名前が必要です。明確にするために、関数は次のとおりです。

注:
1.check_inputは、入力フィールドの値とテーブルを取得してチェックするphpスクリプトであり、jsonでエンコードされたブール値を返します。テーブルに一致するものがない場合はtrue、それ以外の場合はfalseを返します。

function check_input(input, table){

        $.ajax({
            type:"POST",
            url:site_url+"site/check_input",
            data:{
                input:input,
                table:table,
            }
            
            
        }).done(function(resp){
            var is_unique = JSON.parse(resp);
            return is_unique;
        });
    }

この関数は、remoteオプションをに設定することで呼び出されます
check_input($('#field').val(), 'table.column');

ご覧のとおり、MySQLテーブルをクライアント側から指定する必要があります。すべてのユーザー(良いユーザーと悪いユーザー)がこれを確認できますが、これは安全ではない、または悪い習慣と見なされますか?
いいえの場合、可用性を確認するための適切な方法は何ですか?

4

1 に答える 1

8

データベース スキーマをクライアント ビュー コードから分離する必要があるため、これは悪い設計手法です (データベース スキーマを変更したい場合)。

文字列を使用して SQL クエリを作成しているように見えるため、これはセキュリティ対策として不適切です。SQL インジェクション攻撃について知らない場合は、それらについて学んでください。これは典型的なケースです。

余分な作業をして、テーブル名を公開する必要のない適切な PHP API を作成します。

于 2012-07-03T12:02:27.717 に答える