数日前、友人のWebサイトでフラッシュゲームのスコアを送信するためにphpインジェクションを使用した人がいました。後で理由を調べたところ、あるパラメータが数値判定を行っていないことが分かりました。
本来、ゲームスコアの保存は game.php?ac=save&fgid=1 の形式で実装されており、fgid はフィルタリングせずに php Web ページで直接呼び出されます。多くの人は、fgid=1 の後に文字 (fgid=1a) を追加して、不正な操作を実行します。
gamlist テーブルに fgid 102 のゲームがあると仮定します
ゲームリストから gname を選択します (fgid='102';
)
ゲームリストから gname を選択します (fgid='102a';
)
このようにして、ゲーム名 gname を見つけることができ、多くの人に機会を提供します
主要なパラメータをフィルタリングすることをお勧めします。デジタルレギュラーフィルターなど
コードをコピーします コードは次のとおりです:
if(preg_match("/^d*$/",$fgid)) echo('は数字です');
else echo('数値ではありません');
または関数を使用してください
コードをコピーします コードは次のとおりです:
if(is_numeric($fgid)) echo('は数値');
else echo('数値ではありません');
IDが数字であるかどうかを判断するためにインターネットで使用される方法
コードをコピーします コードは次のとおりです:
$cid = empty($cid)? 1 : intval(preg_replace("/[^-d]+[^d]/",'', $cid));
これら 2 つのメソッドの違いは、is_numeric は小数点も数値として扱うのに対し、前の正規表現は小数点を文字として扱うことです。
よく使用される通常の操作をいくつか添付します:
認証番号: ^[0-9]*$
n 桁の番号を確認します: ^d{n}$
少なくとも n 桁を確認してください: ^d{n,}$
m-n 桁の数値を確認します: ^d{m,n}$
ゼロで始まる数値とゼロ以外の数値を検証します: ^(0|[1-9][0-9]*)$
小数点以下 2 桁の正の実数を検証します: ^[0-9]+(.[0-9]{2})?$
小数点以下 1 ~ 3 桁の正の実数を検証します: ^[0-9]+(.[0-9]{1,3})?$
ゼロ以外の正の整数を検証します: ^+?[1-9][0-9]*$
ゼロ以外の負の整数を検証します: ^-[1-9][0-9]*$
負でない整数 (正の整数 + 0) を検証します ^d+$
正でない整数 (負の整数 + 0) を検証します ^((-d+)|(0+))$
長さ 3 の文字を検証します: ^.{3}$
26 個の英字で構成される文字列を確認します: ^[A-Za-z]+$
26 個の大文字の英字で構成される文字列を確認します: ^[A-Z]+$
26 個の小文字の英字で構成される文字列を確認します: ^[a-z]+$
数字と 26 個の英字で構成される文字列を確認します: ^[A-Za-z0-9]+$
数字、26 文字の英字、またはアンダースコアで構成される文字列を検証します: ^w+$
ユーザー パスワードを確認します: ^[a-zA-Z]w{5,17}$ 正しい形式は次のとおりです: 文字で始まり、長さは 6 ~ 18 で、文字、数字、アンダースコアのみを含めることができます。
^%&‘,;=?$”: [^%&‘,;=?$x22]+
などの文字が含まれているかどうかを確認します。
中国語の文字を確認します: ^[u4e00-u9fa5],{0,}$
メール アドレスを確認します: ^w+[-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*$
インターネット URL を確認します: ^http://([w-]+.)+[w-]+(/[w-./?%&=]*)?$; /(w+(-w+)*)(.(w+(-w+)*))*(?S*)?$
確認用電話番号: ^((d{3,4})|d{3,4}-)?d{7,8}$: – 正しい形式は次のとおりです: XXXX-XXXXXXX、XXXX-XXXXXXXX、XXX-XXXXXXX、 XXX -XXXXXXXX、XXXXXXXX、XXXXXXXX。
ID 番号を確認します (15 桁または 18 桁): ^d{15}|d{}18$
1 年の 12 か月を確認します: ^(0?[1-9]|1[0-2])$ 正しい形式は次のとおりです: "01"-"09" および "1" "12"
月の 31 日を確認します: ^((0?[1-9])|((1|2)[0-9])|30|31)$ 正しい形式は次のとおりです: 01、09 および 1、31 。
整数: ^-?d+$
非負の浮動小数点数 (正の浮動小数点数 + 0): ^d+(.d+)?$
正の浮動小数点数 ^(([0-9]+.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9] * .[0-9]+)|([0-9]*[1-9][0-9]*))$
非正の浮動小数点数 (負の浮動小数点数 + 0) ^((-d+(.d+)?)|(0+(.0+)?))$
負の浮動小数点数 ^(-(([0-9]+.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0- 9 ]*.[0-9]+)|([0-9]*[1-9][0-9]*)))$
浮動小数点数 ^(-?d+)(.d+)?