3

私はページネーションの問題を与えました:

$num_por_pagina = 5; 
$paginac = $_GET[paginac]; 
if (!$paginac) {
   $paginac = 1;
}

PHP / SQLインジェクションを避けるために整数のみを取りたい

たとえば、次のようにアクセスします。

http://www.mysite.com/index.php?paginac=3.3またはhttp://www.mysite.com/index.php?paginac=3,3

結果 SQL 構文にエラーがあります。7 行目の '4.6, 2' 付近で使用する正しい構文については、MySQL サーバーのバージョンに対応するマニュアルを確認してください。

から:

www.mysite.com/index.php?paginac=3.3 または www.mysite.com/index.php?paginac=3,3 へのアクセス

エラーが発生しました。このページはアクティブではありません。

4

5 に答える 5

1

数字を受け取ることがわかっている場合 (またはその必要がある場合) は、最初の防衛線としてキャストできます。

$paginac = (int) $_GET['page'];

page定数を表します。キーには引用符を使用する必要があります。

数値以外の文字列を受け取った場合は、代わりにページ 0 を要求するだけです。

第二に、ほとんどの場合、いくつかのハックを使用して正しく注射するのではなく、適切に注射を防ぐ方法について読みたいと思うでしょう.

于 2012-07-30T19:28:13.650 に答える
1

試す

$paginac = intval($_GET[paginac]);
于 2012-07-30T19:29:01.190 に答える
1

引用符がありません

$paginac = $_GET["paginac"];

また

www.mysite.com/index.php?page=3.3

「ページ」を取得パラメーターとして渡し、「paginac」ではなくそのパラメーターをキャッチします

$paginac = $_GET["page"];

mysql でエラーが発生する場合は、そのコードも投稿してください。

于 2012-07-30T19:27:23.853 に答える
0

is_numeric()あなたのテストはまだSQLステートメントを書いて実行することを許可しているように見えます.これはあなたのエラーをスローしています.

GET 変数が数値でない場合、クエリが実行されないことを確認してください。

また、連想配列インデックスにアクセスするときは、引用符を使用してください。paginacを getで渡す場合:

$paginac = $_GET['paginac'];

get を介してページを渡す場合:

$paginac = $_GET['page'];
于 2012-07-30T19:27:12.380 に答える
-1

私はこのようなことをします:

if ($paginac < 2)
{
    $paginac = 1;
}

とにかく文字列の場合、PHPは変数を1にキャストするため、このメソッドはテキストを1にキャストし、負の数に対しても役立ちます

于 2012-07-30T19:27:22.463 に答える