0

それにもかかわらず、ばかげた質問かもしれません:

私は次のコードで遊んでいます:

$a='a';

if ($_GET['a'] == $a)
    echo 'true';
else
    echo 'false';

さて、検証を破るためにデータを送信する方法はありますか?明らかに、SQLインジェクションで実行できた方法は実行されません。

この検証方法がどれほど安全か疑問に思っています。

前もって感謝します。

編集:

私の質問は、$ _ GETを介して渡され、比較を「中断」し、常に「true」を出力できるものはありますか。

4

3 に答える 3

2

あなたが$_GET['a']本当に顔が等しいことを検証しようとしている"a"なら、そうです、それはコードです。

ただし、期待していて、それ"a"だけ"a"がユーザー入力であってはならない場合。

検証(またはサニテーション)とは、彼らがあなたに投げかける可能性のあるあらゆる文字列を取得し、それがあなたが望むあらゆる目的に対して有効であることを確認することを意味します。データベースに送信される場合は、パススルーするmysql_escape_string()か、プリペアドステートメントを使用します。html_entities()HTMLとして表示する場合は、またはを使用して有害なタグがないことを確認してstrip_tags()ください。

あなたの検証は、ユーザーが入力したと言う以外の目的にはあまり適していません"a"しかし、はい、他に何も"a"通り抜けることができないでしょう。

于 2012-04-03T20:55:23.327 に答える
0

何が入ってくるのかを正確に知っている場合は、型強制なしで比較して、空のパラメーターを確認できます。

$a = 'a';

if( !empty( $_GET['a'] ) && $_GET['a'] === $a  )
{
  //do more validation using your data model
}
else
{
  //output error msg
}
于 2012-04-03T20:56:24.403 に答える
-2

mysqli拡張機能のPrepared-Statementsを使用できます。これにより、すべての可能なインジェクションがすでに防止されます。

このようなmysqlを使用したくない場合、mysqliには「real_escape_string」もあります。これは、ユーザー入力を入力するときにクエリで使用できるメソッドです。

$sql = "SELECT `name` FROM `example` WHERE `id` = '".mysql_real_escape_string($YOURVAR)."'";

標準のmysql拡張機能からのreal_escape_stringメソッド

mysqli real_escape_string

于 2012-04-03T20:56:00.787 に答える