2

HTML から PHP コーディングに移行したので、ニュース ページのリンクを作成するときに、HREF を使用して行の ID をリンクとして取得し、記事のタイトルを表示可能/クリック可能なリンクにしました。

echo "<a href=news.php?id=".$row{'id'};
echo ">";
echo ucwords(strtolower($row{'newstitle'}));
echo "</a>";

そのため、誰かがタイトルをクリックすると記事にリダイレクトされ、アドレス バーは次のようになります (明らかにこれは例です): http://site.com/news.php?id=1

の後の情報を検証するにはどうすればよいですか? id=int (常に数値) であり、サイトに損害を与える可能性のあるユーザー コードやその他の入力ではありませんか? コードをサニタイズ/検証する方法を見てきましたが、見つかったすべての例は、単に住所が有効であることを確認するのではなく、住所で使用されるフォームに情報を入力することに関するものでした。支援のために。ありがとう

4

3 に答える 3

3

filter モジュールを使用する必要があります。

$id = filter_input(INPUT_GET, 'id', FILTER_VALIDATE_INT);
if ($id === false) {
     // not an integer
}

またはctype_digit()、変数が 10 進数のみで構成されているかどうかを確認するために使用できます。

if (ctype_digit($_GET['id'])) {
    // it's an integer
} else {
    // not an integer
}

または短い:

ctype_digit($_GET['id']) or die("oops that's not an integer!");

しかし、dieまたはexitコードをテストしにくくします。


is_numericこれも機能しますが、整数だけでなく、数値の文字列表現に対して true を返します。

于 2011-08-28T12:16:25.747 に答える
1

これを試して

<?php
if (is_int($_GET["id"])) {
echo "is integer\n";
} else {
echo "is not an integer\n";
}
?>
于 2011-08-28T12:16:18.413 に答える
0

0整数 ID の有効な数値として除外した場合は、次の操作を行うだけです。

$id = (int) $_GET['id'];
if (!$id) {
    # no number -or- 0 given
} else {
   # regardless what have been given, it has been converted at least to some integer.
}

それはキャストによるものです。現在$idは常に整数なので、より安全に使用できます。

ただし、ほとんどの場合、数値が負でないことも確認する必要があります。

$id = max(0, $_GET['id']);

この関数は、整数へmaxのキャストを処理します。$_GET['id']指定された値が 0 より大きい場合、ID が 0 以上であることを保証します。0 以下の場合、0 が最大数です。

実際に入力をより厳密に検証する必要がある場合は、比較のために文字列に戻すことができます。

if ("$id" === $_GET['id'])
{
   # Input was done as a string representation of the integer value.
}
于 2011-08-28T12:43:35.843 に答える