0

昨日、私のサイトがハッキングされました。ハッカーはなんとか管理エリアにログインし、彼の Web サイトへのリダイレクト リンクを含むブログを投稿しました。そこで、ログインを安全にするために少し助けを求めています。

これが私のスクリプトです:

    $username = $_POST['username'];
    $password = md5_base64($_POST['password']);

    $stmt = $mysqli->prepare("SELECT id, username, password, permission FROM user WHERE username = ? AND password = ?");
    $stmt->bind_param('ss', $username, $password);
    $stmt->execute();
    $stmt->bind_result($userid, $username, $password, $permission);
    $stmt->store_result();

    if(($numRows = $stmt->num_rows) > 0)
    {   
        $response_array['status'] = "success";
        $response_array['message'] = "Logged in";
    }
    else
    {
        $response_array['status'] = "error";
        $response_array['message'] = "Sorry, Wrong Username/Password Combination" .$password;                   
    }

md5_base64 関数は次のとおりです。

    function md5_base64 ( $data ) 
    { 
       return preg_replace('/=+$/','',base64_encode(md5($data,true))); 
    } 

ヘルプ、アドバイス、改善は大歓迎です。

4

3 に答える 3

1

攻撃がどのように発生したかに関する少しの情報が必要です。

  1. プログラムの不具合というより、 SQL インジェクションの可能性があります。

  2. クエリをデータベースに送信する前に、常に入力をサニタイズしてください。一重引用符は SQL インジェクション攻撃を引き起こす可能性があります。

  3. デフォルトのパスワードまたは admin 、 admin123 、 12345 などの単純なパスワードに注意してください。

  4. 簡単に推測するか、辞書攻撃を使用してクラックできます。

    複雑なパスワードも使用してください。

  5. Database を使用している場合は、Prepared Statementを使用してください 。

よろしく

アンシュル・カッタ

于 2013-02-14T09:05:07.553 に答える
1

ログイン スクリプトに問題はありません。非常にばかげた関数 md5_base64() を除いては。しかし、SQL インジェクションの観点からは無害です。
「qwerty123」のようなパスワードを使用すると、抜け出すために狡猾な注射は必要ありません。名前は、パスワードと同じくらい簡単に推測できるものだと思います。

または、他の欠陥がある可能性があります。ユーザーなどを覚えておくための愚かなクッキーのように

于 2013-02-14T09:16:58.913 に答える
0

自問する必要がある質問 - その人はどのようにしてパスワードを入手したのか?

彼は実機にログインしましたか?これは、セキュリティ監査によって防止でき、ftp/telnet へのアクセスを削除します -/etc/inetd.conf不要なサービスを編集して削除します。また、起動時に開始されるデーモン (Google のランレベルと開始されるもの) も確認してください。SSH を使用してマシンにアクセスするだけです。

次に、データベースを見てください。MySql は、特定の IP アドレスからの接続のみを受け入れ、SSH を使用するように構成できます。また、データベースへのアクセスが、特定のデータベースに対する既知の権限を持つユーザー アカウント経由であることを確認してください

ファイアウォールも確認してください。これにより、人々がマシンにリモートでアクセスするのを防ぐことができます。

次に、Web サーバーの構成を確認します。おそらく、管理領域へのアクセスには HTTPS を使用します。

また、上記の anshulkatta のアドバイスに従ってください

于 2013-02-14T09:10:17.490 に答える