filter_var($_POST['var'], FILTER_SANITIZE_STRING);
で各$_POST
値をサニタイズするのではなく、多くの変数を含むフォームを使用してメールを送信しています。デフォルトのアクションはFILTER_SANITIZE_STRING
であると信じているのでうまくいくようですが、私は人々の意見が何であるのか疑問に思っていました。 $_POST
値は個別に新しい変数に埋め込まれるため、開始時にarray_mapのみを使用してすべてをサニタイズします...
$_POST = array_map('filter_var', $_POST);
基本的に次の情報を提供するために、ご返信いただきありがとうございます。
キャプチャされているフォームに20〜30個の入力フィールドがあり、入力を確認するためにデータがユーザーに表示され、変数がサニタイズされ、ユーザーに電子メールが送信され、最後に詳細がdbに入力されます。
現在、上記のarray_map関数と、メールを送信する前のメールアドレスのFILTER_SANITIZE_EMAILを使用してサニタイズしており、dbへの挿入の前にmysql_real_escape_string()を使用して入力をエスケープしています。準備されたステートメントなどに入ることなく。あなたは私がさらに何かをすべきだと思いますか?再度、感謝します!
各入力変数の型が文字列であり、それらを一度にすべてサニタイズする場合、次を使用できます。
// prevent XSS
$_GET = filter_input_array(INPUT_GET, FILTER_SANITIZE_STRING);
$_POST = filter_input_array(INPUT_POST, FILTER_SANITIZE_STRING);
これにより、$ _ GETおよび$ _POST配列がサニタイズされます。
ここに表示されます: PHP-配列の値をサニタイズ
使用目的に依存します。
データベースに挿入する場合、引用符付き文字列の場合は mysql_real_escape_string()
を、数字の場合は型キャストを使用します-理想的に準備されたステートメントですが、それはまったく別の問題です。
データをWebページに出力する予定がある場合は、 htmlspecialchars()
のようなものをお勧めします
ユーザー入力をシェル引数として使用する予定がある場合は、 escapeshellarg()
を使用します。
メールの送信に関する質問に移ります。さて、次のもので十分です:
filter_var($_POST['message'], FILTER_SANITIZE_STRING);
これは基本的にタグを取り除き、特殊文字をエンコードするだけです。
全面的な衛生を行う正しい方法はありません。必要な衛生管理方法は、データに対して何が行われるかによって異なります。
データを使用する前に直接サニタイズします。
これは私のすべてのプロジェクトで使用するものです:
function util_array_trim(array &$array, $filter = false)
{
array_walk_recursive($array, function (&$value) use ($filter) {
$value = trim($value);
if ($filter) {
$value = filter_var($value, FILTER_SANITIZE_STRING);
}
});
return $array;
}
ポストされたデータのネストされた配列をトリムおよびサニタイズできます
複数のフィールドに特定のフィルターを適用するには、switch
ステートメントを使用します。
$post = filter_input_array(INPUT_POST, FILTER_SANITIZE_STRING);
foreach($post as $k => $v) {
switch ($k) {
case 'int_1':
case 'int_2':
$post[$k] = filter_var($v, FILTER_SANITIZE_NUMBER_INT) * 1;
break;
case 'float_1':
case 'float_2':
$post[$k] = filter_var($v, FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION) * 1;
break;
default:
break;
}
}
注:My IDE(NetBeans)は、グローバル$_POST
をセキュリティ違反として使用することについて警告するため、ローカル$post
変数を使用する習慣になりました。代わりに、ブランケット文字列のサニテーションを最初に行わないことを選択した場合、FILTER_SANITIZE_STRING
をdefault:
の場合に使用できます。