0

このコードを使用しているときは安全ではないことを知っているので、コードに追加できるものはありますか?

私は自己SQLインジェクションを試しましたが、どこかで機能していますが、SQLインジェクションについてあまり知識がないため、それほど多くはありません。しかし、ハッカーはより賢いので、私のウェブサイトを本当にハッキングできます.

URL は次のようになります。

http://example.com/profile.php?userID=1

php

$userID = $_GET['userID'];
$userID = mysql_real_escape_string($userID);
$CheckQuery = mysql_query("SELECT * FROM tbl_user WHERE id='$userID'");

$CheckNumber = mysql_num_rows($CheckQuery);
if ($CheckNumber !== 1)
{
    header("Location: tos.php");
}

私は試した:

http://example.com/profile.php?userID=1'

現場で多くのものを隠します。

私が試したとき

http://example.com/profile.php?userID=1' UNION SELECT * FROM tbl_user; with havij it was hacked

ありがとう :|

4

4 に答える 4

0

mysql_* 機能をまったく使用しないでください。PDO または mysqli を使用します。

http://php.net/PDO http://php.net/mysqli

PDO はあなたのデータをエスケープします。

しかし、現在のコードの場合:

$userID = $_GET['userID'];
$userID = mysql_real_escape_string($userID);

if(ctype_digit($userID))
{
    $CheckQuery = mysql_query("SELECT * FROM tbl_user WHERE id='$userID'");

    $CheckNumber = mysql_num_rows($CheckQuery);
    if ($CheckNumber !== 1)
    {
        header("Location: tos.php");
    }
} else {
    // THE USER ID IS NOT ALL NUMBERS, CREATE AN ERROR
}
于 2013-05-22T07:48:38.603 に答える
0

このコードを使用しているとき、私は安全ではないことを知っています

このステートメントは間違っています。
実際のところ、このコードそのものはかなり安全です。

そして、あなたが以下に提供したコードはどれも害を及ぼすことはありません. なぜ安全ではないと思いますか?

この方法はお勧めできません。はい。また、クエリをフォーマットするために使用している方法は、他のクエリのインジェクションにつながる可能性があります。しかし、現在のコードは完全に安全です。

すべての変数を引用符で囲み、その中の特殊文字をエスケープしている限り、クエリに入れても安全です。
これら 2 つのルールの 1 つを省略した場合(つまり、エスケープするが引用しない、または引用するがエスケープしない) の場合のみ、確実に危険にさらされます。ただし、両方に従っている限り、安全です。

私が推測できる「ハッキング」の唯一の理由は、HTML コンテキストで使用される一重引用符です。状況によっては、「ページ上の多くのものを隠す」ことができます。しかし、SQL の場合、ここに投稿したコードでは無害です

ほら、このリンクから

http://example.com/profile.php?userID=1'

あなたのコードはそのようなクエリを生成します

SELECT * FROM tbl_user WHERE id='1\''

これはmysql にとって非常に正当であり、キャストしてレコードを見つけるため、 id=1のレコードを返すことさえあります。これが、tos.php へのリダイレクトがない理由です。1'1

というわけで、問題は別の場所にあります。

  • 上記のルールに従わないコードがあるか
  • または、この問題は SQL とはまったく関係ありません。つまり、間違ったツリーを吠えているため、脆弱性が開いたままになっています。

ほとんどの場合、値をエコーアウトする必要があります

于 2013-05-22T08:07:50.543 に答える