1。IS_Numberic関数の概要
一部の国内のCMSプログラムでは、IS_Numberic関数を使用しています。
bool is_numeric(混合$ var)
VARが数値および数値文字列である場合、trueを返し、それ以外の場合はFALSEを返します。
2。関数は安全ですか?
次に、この機能が安全かどうかを説明するために、例を見てみましょう。
コードコピーは次のとおりです。$ s = is_numeric($ _ get ['s'])?$ _ get ['s']:0;
$ sql = "test to test(type)values($ s);";
mysql_query($ sql);
上記のフラグメントプログラムは、パラメーターsが数字であるかどうかを決定し、そうでない場合は数を返し、0を返してからデータベースクエリに持ち込みます。 (このように、SQLステートメントは作成できません)
sパラメーターの値として、 '1または1'をヘキサデシマ0x31206f722031に変換します
プログラムが実行された後、以下の図に示すように、データベースを照会してください。
このテーブルのフィールドを再クエリにし、フィルタリングして別のSQLステートメントを持ち込まないと、2回の注入が発生します。
3。概要
この関数を使用しない場合は、標準のSQLステートメントを使用して条件に単一の引用符を追加することをお勧めします。 1または1は表示されません。