-2

get variable を使用して有名な「1 OR 1」手法により、id が文字列 ex:(page.php?id=abc) または整数 ex:(page.php?id= 12)

そのため、 is_string() 関数を使用して文字列と数値の is_numeric をチェックしましたが、最初の文字のみをチェックするだけです。したがって、 ( ?id=ab345 ) の場合でも true が返されます。

では、すべての値が文字列で、すべての値が整数のみであるかどうかを確認する方法はありますか?

これはリンクです: <a href="site.com/page.php?id=MyProfile"> My Profile </a>

このページは ID を取得し、データベース クエリ を実行します。if(isset($_GET['id']) {**AND IF ID IS TEXT ONLY**} {Perform code} 欠けているのはその中間です ** **

4

3 に答える 3

0

あなたの質問に対する多くの可能な答えの1つは次のとおりです。

$id = isset(isset($_GET['id'])) ? (int) $_GET['id'] : 0;    //force to integer, or 0 if not set

これにより、id の値が整数に強制的に設定されるか、URL に設定されていない場合は 0 に設定されます (URL を手動で変更してサイトを破壊しようとするやっかいなスクリプト キディを忘れないでください!)

しかし...正直なところ...これでSQLインジェクション攻撃を防げると思っているのか、少し心配です。この件についてさらに読むことにもう少し時間を費やすことを強くお勧めします。おそらくそれが、あなたの質問が却下された理由です。

于 2012-10-06T19:22:24.063 に答える
0

// Request: _GET['id'] = ab345
var_dump(is_numeric($_GET['id'])); // false
var_dump(is_string($_GET['id'])); // true

// Request: _GET['id'] = 345
var_dump(is_numeric($_GET['id'])); // true
var_dump(is_string($_GET['id'])); // false

于 2012-10-06T19:06:15.667 に答える
0

デフォルトでは、PHP のこれらの入力はすべてstringです。より具体的な値が必要な場合は、PHP が持つフィルターと検証関数 ( Data Filter Docs ) を利用できます。たとえば、デフォルトで使用できるフィルターを参照してください: http://www.php.net/manual/en/ filter.filters.php

于 2012-10-06T19:13:05.303 に答える