-1

誰かが私が間違っていることを教えてもらえますか? PHP フィルターを使用して、フォームのユーザー入力をサニタイズして検証しようとしています。この入力は mySql データベースに送られ、次に html ページ出力に送られるため、すべての html タグを削除し、mySQL のセキュリティも提供する必要があります。

ありがとう。

      /*
 * BEGIN Sanitize and validate
 */

  // Adding fields to sanitize array.
$filters = array(
   'author'  => FILTER_SANITIZE_SPECIAL_CHARS,
   'title'  => FILTER_SANITIZE_SPECIAL_CHARS,
   'description'  => FILTER_SANITIZE_SPECIAL_CHARS,
);


/*** apply the filters to the POST array ***/
$filtered = filter_input_array(INPUT_POST, $filters);


 // filtering out anything that isn't an email address
    $sanitized_email = filter_var(($_POST["email"]), FILTER_SANITIZE_EMAIL);
    if ( filter_var($sanitized_email, FILTER_VALIDATE_EMAIL)  == TRUE) {
        echo '';
    } else {
        echo 'Invalid Email Address.  Go Back.';
        exit;
    }

    /*
 * BEGIN sanitize and validate
 */

新しいコードですが、まだ機能していません。私は何か間違ったことをしています。データベースでまだhtmlを取得しており、エラーが機能していません。

      /*
 * BEGIN Sanitize and validate
 */

  // Adding fields to sanitize array.
$filters = array(
   'author'  => FILTER_SANITIZE_STRING,
   'title'  => FILTER_SANITIZE_STRING,
   'description'  => FILTER_SANITIZE_STRING,
);


/*** apply the filters to the POST array ***/
$filtered = filter_input_array(INPUT_POST, $filters);
$filters = array_map('mysql_real_escape_string',$filters);
$filters = array_map('htmlspecialchars',$filters);
    if ( filter_var_array($filtered, FILTER_SANITIZE_STRING)) {
        echo '';
    } else {
        echo 'Invalid Input.  Go Back.';
        exit;
    }



// filtering out anything that isn't an email address
    $sanitized_email = filter_var(($_POST['email']), FILTER_SANITIZE_EMAIL);
    if ( filter_var($sanitized_email, FILTER_VALIDATE_EMAIL)) {
        echo '';
    } else {
        echo 'Invalid Email Address.  Go Back.';
        exit;
    }

    /*
 * BEGIN sanitize and validate
 */

2番目以下に編集:

データベースにデータを取得するスクリプトの領域にサニタイズ コードを追加することで、サニタイズされたデータをデータベースに表示します。

 $_POST['author'] = mysql_real_escape_string(trim($_POST['author']));
      $author=filter_var($_POST['author'], FILTER_SANITIZE_STRING);

      $_POST['email'] = mysql_real_escape_string(trim($_POST['email']));
      $email=filter_var($_POST['email'], FILTER_SANITIZE_EMAIL);

ここで、メールの検証を完了する必要があります。

4

1 に答える 1

0

まず第一に、クエリのセキュリティはフィルター モジュールによって提供されません。その拡張機能はデータベースの相互作用とは関係なく、ユーザー入力のサニタイズまたは検証のみを行います (その後、データベースを使用せずに多くのことを実行できます)。

更新:たとえば、SQLクエリを壊す引用符またはアポストロフィは、フィルターモジュールを使用した後も存在し、文字列は問題ないため、データベースに保存することにした場合(または勝った場合)、それをエスケープするのはあなたの仕事ですパラメータをバインドするPDOのようなシステムでは問題になりません)

したがって、クエリを保護するには、PDOを使用する必要があります。または、他のシステムに行き詰まっている場合は、適切なものを使用できます ( mysql_* 関数の mysql_real_escape_string で入力をエスケープするなど)

あなたが抱えている問題が何であるかをあなたが言わなかったことを考慮して、ユーザー入力を「クリーン」にしてhtmlを削除したい場合は、FILTER_SANITIZE_SPECIAL_CHARSの代わりにFILTER_SANITIZE_STRINGフラグを使用する必要があることを追加するかもしれませ

私にとって、このスクリプトhttp://codepad.org/Wrgl0qEgは正常に動作し、入力から html タグを削除します

于 2012-04-26T14:48:58.873 に答える