2011-12-08 12 views
0

私は自分のすべてのコードを見直していますが、検証する前にユーザー入力の妥当性を検証する必要性についてもう一度考えています。たとえば、クレジットカードの確認CVV:確認の前に確認が必要ですか?

// validation required? 
if(!preg_match('/^[\d]{3,4}$/', $_POST['card_CVV'])) 
{ 
unset($_POST['card_CVV']); 
$error++; 

// verification 
} 
elseif($card_CVV != $_POST['card_CVV']) 
{ 
$error++; 
} 

// pass verification 
else 
{ 
// process transaction 
} 

検証なしで検証を実行する必要がありますか?

+0

私はここでも注射が可能だと思います。いつでも、ユーザー入力の検証とフィルタリングは、とにかくelseifでフィルタリングされていない '$ _POST'変数を使用すべきでないことを意味します。 – Anonymous

+0

検証と検証の違いを完全に理解しているかどうかはわかりません。それらは事実上同じように見えますが、入力が予想通りの形になっているかどうかをチェックしています。通常、入力を処理する前に、エラーメッセージをユーザーに返すのはかなり単純な方法です。 – cdeszaq

+0

@ Dan Surfrider、私はユーザーデータを保存していない、それでもリスクを投稿するだろうか? –

答えて

2

この特定のケースでは、間違ったフォーマットであったとしたらおそらく正しいとは限りませんから、実際には何もしません。

フォームが送信される前にクライアント側の形式をjavascriptで検証するのがより理にかなっています。ユーザーがすぐにフィードバックを得て、それがわかるように、提出する前に間違っています。

また、$_POST['card_CVV']の内容がSQLクエリに入れられたり、HTMLのように表示されたりすると、注射の可能性に注意する必要があります。あなたはそれを格納していないと言いますが、表示されたコードからは直接の文字列比較のためだけに使用されるので、それは問題ないと思われますが、コードの残りの部分で注意してください。

1

Realyは、ユーザーに表示する必要があるコンテキストやエラーメッセージに依存します。

たとえば、最初の入力で上記の検証が必要です。有効でない場合は、ユーザーにメッセージを表示します。しかし、あなたが正しいcard_CVVを入力したかどうかを確認したいのであれば、youreエラーメッセージが異なっているので両方必要です:有効なcvvまたはcvvが一致しません。

+0

私はただ、 "この取引は拒否されました。"という一般的なメッセージを出したいと思っています。 –

+2

はい、しかし、あなたを開発者にしている場合は、ユーザの入力操作に明確で意味のあるエラーを表示するように、コンシューマを調整する必要があります。 –

+0

はい、私は通常、より正確なエラーメッセージを出すでしょうが、クレジットカードの取引では、それはあまりにも多くのヒントでしょうか? –

0

いずれの場合も、処理コードが正しく動作することを確認する必要があります。これは、ほとんどの場合、必要な入力がないと処理が失敗することを意味します。処理パイプラインでどこをチェックするかは重要ではありませんが、「失敗」して何が起きているのかをユーザーに知らせるのがよい方法です。

同時に、コードを繰り返したくない(物事をDRYにする)ので、同じ問題が2回以上チェックされるべきではありません。

関連する問題