2012-01-02 5 views
4

is_numericはSQLインジェクション攻撃を阻止するのに十分だと私は安全に仮定できますか(私がちょうどID番号を取得していれば)?またはis_numericを通過できるSQLインジェクションメソッドがありますか?は、SQLインジェクションがis_numeric関数を介して可能性がありますか?

+5

おそらく安全です。しかし、これはプリペイド・ステートメント(PDO)の使用を避ける理由ではありません。 –

答えて

5

が務めだけを行うには:あなたはis_numeric機能のオーバーヘッドを回避することができ

$id = isset($_GET['id']) ? (int) $_GET['id'] : 0;

この方法です。どちらの方法でも注射を避けるのに十分です(ただし、is_numericがFALSEを返した場合は、データに対して何かを行う限り)。三項演算子はまた、問題の$ _GET変数が存在しない場合、E_NOTICEを受け取らないようにします。

+0

関数呼び出しのオーバーヘッドを三項演算子と比較してどれだけ高いかを記述できますか? – KingCrunch

+0

@ KingCrunch:必ずしもこのメソッドを使用する必要はありません。入力を検証する機会はありません。 –

+0

@KingCrunch私は 'オーバーヘッド'引数が宗教的なオタク戦争を開始することができます知っているが、私は不必要な関数呼び出しを避けることがこれまで悪いことができないか見ていない。 – rdlowrey

3

intvalまたはfloatvalを使用できます。あなたがより良いだろう

3

いいえ、ありません。しかし、例えばis_numeric('0xaf5') == trueということを思い出させてください。それで、あなたが達成したいことに応じて十分ではないかもしれません。

関連する問題