2

jquery の $.ajax() AP を使用して、検証のためにデータをサーバーに送信します。(すべてのフォームではありませんが、サーバー側の検証がさらに必要なフォームです)

したがって、私のサーバーサイド スクリプトは POSTED データを受け取り、検証マジックを実行します。すべてのデータが検証された場合は、単純に数字の「1」を返します。それ以外の場合はゼロの「0」を返します。

form.html

<form class="systemform" id="testform">
   <input type="text" name="emailaddy" id="emailaddy" value="me@me.com" />
   <input type="submit" name="button" id="272746866" value="Submit Form">
</form>

<script language="javascript" type="text/javascript">
$(document).ready(function(){

   $("form.systemform").submit(function(){
      var formid = $(this).attr("id");
      var allFormValues = $(this).serialize();
      $.ajax({ url:"validate.php",
               data:allFormValues+"&formId="+formid,
               success:function(response){
                   if(response == "0"){ alert("invalid data"); }
                   if(response == "1"){ alert("data validated"); }

               }
       });return false;

});
</script>

<?php
    // validate.php

      /* validate the serialized data here */


      die("1"); // if everything checks out
    ?>

フォームデータを検証するこの方法について、他の意見/戦略を聞くことに非常に興味があります。利点は、ブラウザーの更新がないことです。
しかし今、私は検証後に何を実行するのが最善かについて興味があります.

現在、上記のコードはあまり機能していません。そのためsuccess、$.ajax API の部分では、サーバー側スクリプトからの指示を待機する eval() メソッドを用意しています。

success:function(response){
    eval(response); return false;
}

eval() は、js 関数またはコマンドを返すことで、サーバーからの柔軟性を高めます。

2 die() 例:

<?php
//validation.php

die('alert("your email is incorrect");');  
die('$("selector").html("fix this part");');
?>

誰かが eval() について何か言いたがることは知っていますが、それは安全ではありません。聞きたいです。そして、その理由を知りたいです。(それは私たち全員にとって良いことです)しかし、いくつかの良い例で詳しく説明してください.

4

1 に答える 1

0

evalあらゆる JS を実行でき、ユーザーに対する攻撃を簡単に実行できるため、常に安全ではない可能性があります。ハッカーが任意のスクリプトを実行する能力を持ち、悪意のある URL やリックをユーザーに送信できると想像してください。特定の入力値を使用する場合、サーバーにこれを発行させることができます。

die('window.location.href = "http://evilsite.com"');

さらに、クライアントとサーバーの実装の間に結合があってはなりません。一部の要素名には依存性があるかもしれませんが、コードには依存していません。PHP コードと JavaScript を統合しようとすると、実際には柔軟性が失われます。が本当に柔軟である場合evalは、クライアント側での処理方法を再考する必要があることを示している可能性があります。

サーバー側の検証とクライアント側の検証を行う場合、常に両方を別々に行う必要があります。あらゆる種類のクライアント側のセキュリティを回避することはまったく簡単です。これを使用する唯一の理由は、ユーザーの利便性 (ページのリロードを回避する、影響を受けるフィールドを強調表示するなど) のためですが、自分自身を保護するためにサーバー側の検証も行う必要があります。

検証に ajax を使用する唯一の理由は、DB から値を確認する必要がある場合です (たとえば、ユーザー名が既に取得されているかどうかを確認するなど)。必須フィールドなどの検証に ajax は使用しません。

于 2013-01-21T03:21:53.923 に答える