2012-04-03 8 views
0

単純なテキストフィールドから無効な$ _POSTデータを拒否するネイティブPHP関数はありますか?PHPネイティブ関数で共通テキストフィールドをフィルタリングする

現在、私は正規表現でカスタムフィルタ関数を使用しています。可能であれば、コードを単純化したいと考えています。

たとえば、姓を入力するためのフォームフィールドがあるとします。私は提出された値をチェックし、無効な文字が含まれている場合はすぐに入力を拒否したい。ここで

は、PHPの関数を考えるための私の基準である:

  • 人の姓は「スミス・ジョンソン」であるかもしれない、「ヴァン・ビューレン」、「オマリー」など、その機能のニーズ空白、ハイフン、アポストロフィなどを許容すること。

  • 私の目標は、入力をテストしてすぐに拒否することです。それを浄化し、追加のフィルタと処理ステップで実行することです。私がキャッチしたい入力の

  • 2つの例は、ここに

    username' -- 
    username; DELETE FROM users; 
    

は、私の知ると、なぜ私はそれらを使用して疑問を持っているオプションです...

  1. IS_STRING():この関数は

  2. 上記の2つの例のいずれかをキャッチしていないようです
  3. にaddslashes():この関数は、第二の基準

  4. にhtmlentitiesを(失敗)はhtmlspecialchars()にaddslashes同じ()。それはそれらを消毒するのではなく、不要な文字がなくなるためは第二の基準を失敗しますが、#3好ま:入力が無効な場合、私は)(

  5. strip_tagsを消毒いたとしても、それを扱う維持する必要はありません

  6. filter_input(... FILTER_SANITIZE_STRING):私が知る限り、これはstrip_tags()と同じです。 **

  7. ctype_alpha()、ctype_alnum():空白やその他の文字を許可しないため、最初の条件に失敗します。

  8. 正規表現/カスタム関数:これは私が使用しているものです。私は本当に私のコードを簡素化し、(最小限だが)正規表現のオーバーヘッドを排除することを好むだろう。

-

**興味があるだけ:PECLはfilter_input)(strip_tags()より速く作るのですか?

+0

SQLインジェクションを適切に防止するために、プレースホルダと共にPDOを使用してください。私はいくつかのHTMLタグをサポートしない限り、XSS注入のために私はhtmlentitiesを使う傾向があります。その場合、HTMLパーサを使用して許可されたタグのフィルタを作成します。 – Cfreak

+0

適切なエンコーディングを使用しても問題ありません。 – Gumbo

+0

ありがとうございます - これらのベストプラクティスの両方に同意し、両方のコードに適用します。私は質問や出力を準備する時点までに入力を拒否することに興味があります。 – cantera

答えて

1

このような機能はありません。基本的に、ある文字列を他の文字列からどのように伝えるかを求めていますが、どちらも複雑な条件の文字列です。これは、「ネイティブ」機能にとって非常に曖昧な作業です。

これを実現する最も「ネイティブな」方法は、正規表現を使用することです。これがすでに行っていることです。

また、$ _POSTと$ _GETは、いくつかの検証をパスした後ではなく、未加工の形式でパラメータを表現することになっているため、イデオロギーに反するものです。

0

フォーム入力の検証には常に正規表現を使用します。私はあなたが興味を持っていれば、私が長年にわたって開発してきた完全なフォームバリデーションと作成機能を持っています。

関連する問題