1

申し訳ありませんが、これに関連する前に同様の質問をしましたが、管理者に対する完全な証拠にするためにコードを修正しました (と思います)。通常のユーザー アカウント。

管理者とユーザーはメンバー リスト ページを共有します。違いは次のとおりです。管理者は次のようなものを取得します

Edit | Delete | Make Admin

これは、あなたが最も見る必要がある基本的なコードです....

if(@$_GET['id'] != ""){
    if (has_access($session_user_id, 1) === false) {
        header('Location: index.php');
        exit();
    }
    $userID = intval($_GET['id']);
        if (!$userID) {
        header('Location: index.php');
        die();
    }
    $sql = "DELETE FROM users WHERE user_id='".$userID."'";
    $query  = mysql_query($sql);
    header('Location: members.php?id=&page=1');
}

コードのさまざまなセクションについて説明します。

if(@$_GET['id'] != ""){
    if (has_access($session_user_id, 1) === false) {
    header('Location: index.php');
    exit();
}
.....continued

これは、URL の ID が "" と等しくない場合は、ユーザーのランク (管理者または通常) を確認します。通常の場合は、インデックス ページに移動し、スクリプトを停止します。

通常のユーザーは id ステートメントを編集することは想定されていません...編集する場合は...ハッキングまたは何らかの目的で編集していることを意味します....

次の部分に進みます

$userID = intval($_GET['id']);
    if (!$userID) {
    header('Location: index.php');
    die();
}

これは基本的に intval であるため、ID は ONLY です。NUMBER、これは次のようなものをブロックします

'; DELETE FROM users WHERE user_id=19;

NEXT ... 追加のセキュリティ機能。ユーザー ID がリダイレクトされていない場合は、リダイレクトして終了します

最後に、

$sql = "DELETE FROM users WHERE user_id='".$userID."'";
    $query  = mysql_query($sql);
    header('Location: members.php?id=&page=1');
}

SQL を実行し、ユーザーを同じページにリダイレクトして、結果を更新します。

これは私が述べている正しい論理ですか?

ここに私の完全な members.php ファイルがあります

http://pastebin.com/tkstyrWg

また、ウェブサイトはでテスト用に稼働しています

http://1334.3owl.com

members.php には実際には

protect();

ログインしていないユーザーをメインページにリダイレクトする機能

このWebサイトでSQLインジェクションを自由にテストできます...

これは、テストに使用できるデモユーザーです

demouser
demopass

スクリプトが安全でない場合...どうすれば安全にできますか?

また、管理者に対して安全ですか?

URL の SQL スクリプトは正しいですか?

4

1 に答える 1

1

スクリプト全体を確認しませんでしたが、intval に関しては、ユーザー ID のみであるため、安全にするために必要なのはそれだけです....

于 2013-10-20T16:57:15.390 に答える