2011-07-25 11 views
2

セットアップ: リモートのmysqlデータベースに値を挿入することでこれまでユーザーを登録できるアンドロイドアプリケーションがあります。私は今、ログインを実装しようとしています。ログインを作成するにはどうすればいいですか

ユーザーがログインしているかどうかを保存するデータベースのユーザーテーブルに「ログイン」列を追加できると思っていました。一定の時間が経過した後にユーザーをログオフするトリガーがあります。

アプリケーションの使用は、ユーザーが特定のファイルにアクセスできるかどうかに基づいてファイルを取得することです。このために、ユーザテーブルテーブルには、ユーザが特定のファイルに対するアクセス権を指定する「アクセス」カラムがあります。ユーザーがリスト内のアイテムをクリックすると、アプリケーションはログイン情報を送信し、サーバーは情報が正しいかどうかを判断し、指定されたファイルにアクセスできたかどうかを確認し、情報正しい。

私が持っている問題は、登録情報をチェックするだけで、(ソケットに接続し、ネットワーク上に文字列を送るために)約2秒かかり、ログインとアクセスIDの両方をチェックしようとすると少し時間がかかります。

私は車輪を再発明しようとしているように感じますが、この問題については実行可能なリソースが見つかりません。批判?提案?

+1

I 〜するだろうggest ** not **は、ユーザーがログインしているかどうかを判断する列を持っています(サーバー側)。クライアントアプリケーション(アンドロイド)は、成功したログインで取得した何らかの種類のアクセストークンをサーバーに送信する必要があります。これにより、ユーザーがログインしたかどうかが判断されます(クライアントアクセストークンとサーバーデータベースのトークンが一致します)。すべてのリクエストでアンドロイドアプリがこのトークンを送信する必要があります – binnyb

+0

@binnybそれははるかに理にかなっています。ありがとう。 –

答えて

1

は、DB-クライアントをサーバに接続しないでください(私はちょうど開始する場所を知っておく必要があり、完全な再設計をやって気にしないだろう)。そこの権限は非常に基本的であるため、ハッキングの試みをインターセプトする方法は、ません(など、SELECT、UPDATE、彼らがクエリを無視する):

UPDATE users SET name='%s' WHERE userID=%i // where %i will be defined as the real userID 

上記は、しかし、ユーザーのアカウント情報を更新するための有効なクエリでなければなりませんハッカーができます簡単にインターセプト本とにそれを変更します。

UPDATE users SET name='%s' WHERE userID=15 // ... or any other variable 

代わりに、あなたは各クエリを検証するウェブベースのAPIを作成する、またはより良いはずです、唯一の特定のAPI-のコマンドをサポートしています。

account/update.json?name=%s 
+0

クライアントがそのテーブルに挿入して選択する権限しか持っていなかった場合でも、これは本当ですか? –

+1

確かに、 '%i'-paramを置き換えることで、'ユーザからのメールを選択WHERE userID =%i'でもハッキングできます。それに加えて、ハッカーはあなたのアプリケーションを逆コンパイルしたり、ネットワークスニファを使ってどのMySQLサーバに接続しているかを知り、自分のSELECTとINSERTクエリを書くことができます(例えば 'SELECT email FROM users'彼はすべてのあなたのユーザーの電子メールアドレスの完全なコピーを持っています)。 – elslooo

関連する問題