ログインしてさらにmixiを楽しもう

コメントを投稿して情報交換!
更新通知を受け取って、最新情報をゲット!

Javaの課題丸投げコミュのログインシステムについて

  • mixiチェック
  • このエントリーをはてなブックマークに追加
先ほどコミュに入れていただきました。

大学の講義で出された課題なのですが、
いくら悩んでも解けないので、皆様にご教示願いたく書き込ませていただきます。
環境はeclipseで作成しています。


[課題]
・下記の内容で、ログイン・システム(Login02.java)を作成せよ。
 
(1)次の表のようなString型の二次元配列:userを用意する。

________|__id__|__password__|__name__|______
ユーザ1 | taro | java    | SUZUKI |
ユーザ2 |    |       |    |
ユーザ3 |    |      |   |

(2)各自、3人分のユーザ
(id, password, name:全てアルファベット)を設定する。

(3)idとpasswordをキーボード入力させる

(4)両方が認証された(正しい)とき、
「ようこそ SUZUKI taroさん。あなたは、このシステムのユーザです。」と出力する。

(5)idだけ認証された(正しい)のとき、
「パスワードが違います。」と出力する。

(6)passwordだけ認証された(正しい)のとき、
「idが違います。」と出力する。

(7)両方が認証されない(正しくない)のとき、
「あなたは、このシステムのユーザではありません。」と出力する。


前回の講義で、一人分のログインシステムを作るという課題が出たのですが
参考にそれを貼っておきます。
ちなみに(4)のように名前を表示する条件はありませんでした。

import java.io.*;
public class Login01 {
public static void main(String[] args)throws IOException {

BufferedReader br =
new BufferedReader(new InputStreamReader(System.in));

//IDとPASSの設定
final int id = 1234;
final String password = "pey";

//打ち込ませる
System.out.println("ログイン画面を表示します...");

System.out.println("IDを入力して下さい>");
int inputid = Integer.parseInt(br.readLine());

System.out.println("パスワードを入力して下さい>");
String inputpassword = br.readLine();

//認証チェック
if(inputid==id){
if(inputpassword.equals(password)){
System.out.println("ようこそ。あなたは、このシステムのユーザです。");
}

else{
System.out.println("パスワードが違います。");
}
}
else{
if(inputpassword.equals(password)){
System.out.println("IDが違います。");
}
else {
System.out.println("あなたは、このシステムのユーザではありません。");
}
}
}
}

コメント(19)

その前に、
-if(inputid==id){
+if(inputid.equals(id)){

一部省略して書きます。
直書きなので、エラーあるかと。

public class User {
String id;
String password;
String name;
}

〜略〜
User[] users = new User[n];
users[0].id = "taro";
users[0].password = "java";
users[0].name = "SUZUKI";
〜略〜
for(User tmpUser : users ) {
if(inputid.equals(tmpUser.id)){
if(inputpassword.equals(tmpUser.password)){
System.out.println("ようこそ " + tmpUser.name + " " + tmpUser.id + "さん。あなたは、このシステムのユーザです。");
} else {
System.out.println("パスワードが違います。");
}
} else {
if(inputpassword.equals(tmpUser.password)){
System.out.println("IDが違います。");
} else {
System.out.println("あなたは、このシステムのユーザではありません。");
}
}
}
}


括弧の対を揃えるの面倒だ。
なるほど!!!!
認証部分はあってたのですが、最初にある配列の設定とユーザの定義が
ごっちゃになってたみたいでした。

これで提出できます!ありがとうございます!うれしい顔うれしい顔うれしい顔
調度良いトピなので質問させてもらいます。
私は一度も現場を体験したことがありませんが、現在Javaサーブレットで社内システム開発中です。ログイン画面を作成するにあたって色々とWeb上で見本となるページを模索している時に疑問に思ったことがあります。
ヤフーやこのミクシィのログイン画面でもそうなのですが、IDとパスワードの両方を空文字のまま送信した時には画面はそのままなのに対して、どちらか一方にでも何かしらの文字を入力して該当データがないときには別画面へ遷移し、再入力を求められます。
それを発見するまでに私が作っていたログインシステムですが、空文字であろうがDBに該当データが無い場合であろうが、ログイン出来ない時の流れは

ログイン画面(login.jsp)→サーブレット(LoginCheck.java)→元のログイン画面(login.jsp)

で、戻るときに元のログイン画面にエラーメッセージを送り表示させるというものでした。
先に記述したように空文字の時と入力ありの時で画面を分ける理由とは何なのでしょうか?
特別な処理が行われているのでしょうか?
また、ログインシステムを作成するにあたってやっておいた方が良い処理などありましたらアドバイスお願いします。
>3

Java script で対応が正解では。いちいちサーバーに処理をお願いしてたらきりがありません。
PR層側で適切にチェックしているにすぎません。

>4の方がおっしゃっているように
その度にhttpコネクション張って、送信して、JSP→servlet化→HTML出力なんてやってたら
きりがないからそういう「仕様」にしているのでしょう。

>3 が作っている認証システムの「要件」が「どっちも空でも一応確認する」というものならば
   そういう仕様で問題ないのではないでしょうか?<つまり「きめ」の問題です。
>3
仕様、だと思います。

それはそれとして、

-------------
(5)idだけ認証された(正しい)のとき、
「パスワードが違います。」と出力する。

(6)passwordだけ認証された(正しい)のとき、
「idが違います。」と出力する。
-------------
この仕様はダメダメだね。
セキュリティ的に(5)はあり得ないし、
(6)はなんのこっちゃ?アホちゃうか!って感じ。
区別なく、IDとPasswordがマッチしなかったときに「Id,PassWordが正しくありません」が普通だと思うが。
>7
「このシステムを利用するのは社員の方だけです。
だから悪意の第三者なんていないんです!」
>>8
それなら(5)は許容しよう。
でも、(6)だけは絶対に許容できない。
ってか、仕事でこんな仕様出した時点で内部レビューでボコボコです。
>仕様、だと思います。

そういう仕様にしたのはなんでって質問でしょ(笑

>でも、(6)だけは絶対に許容できない。

そういうことは個人で判断するより客に確認した方がいいのでは?
みなさんお答えいただきありがとうございます。
サーバーへの負荷を考慮してるわけですね。

勉強になりました。
悪意の第三者が存在しないのなら認証行為そのものに意味がないよね 笑い
>10
>>そういうことは個人で判断するより客に確認した方がいいのでは?

これは演習問題だと割り切ればアレですが、
実際のアプリとして、明らかに(6)は仕様としておかしいでしょ?
個人判断云々ではなく、普通な考え方だと思います。
IDとPasswordの主従関係を考えれば自明なのに。
もし、こんなロジックのログイン画面がサービスされてるなら見てみたいものだ。

発注する側も、受注する側もやったことあるけど、
発注する立場として、こんなの伺い立てられた日には
「この会社大丈夫か?お付き合い止めた方が良いかも」と思っちゃいますよ。
>12
情シ「idとpwassword はどちらも社員番号です。」
>実際のアプリとして、明らかに(6)は仕様としておかしいでしょ?

課題が間違ってるなら講師に確認しないとまずいってこと。

課題を要件と置き換えればわかるじゃん。
要件が間違っていたらまずそれを客に確認するだろ。その上で仕様を探る。確認しないで勝手に直すのは論外。

この課題にしても、そのあたりの対応、つまり、課題の間違いを講師に確認するのを含めて「課題」と考える方がいい。これは深読みではない。そうした方が安全ということ。
>>15
そうねぇ。教師もそういう反応望んでるのかもね。

でも、1ヶ月も前の課題だ。
既に遅いだろう。

そもそも、前回の講義でも同様のロジックだ。
...駄目じゃん<講師

それはそうと1で提示しているロジック、
ID,Passwordを1回入力するたびに、登録している人数分、
何らかのメッセージ出すように見えるんだけど...
>>7
言い方はキツイが意見としては同意です。
出題の件、課題としてはそれぞれの項目を区別、組み合わせで判定させるという意図であるとは思いますがセキュリティ観点からサンプルとしてはイマイチですね。
教材としては、普通はしませんが…と断っての出題であってほしいものです。


>>8,12
まあネタかとは思いますがw
エンジニアとしては、懸念点、一般的な事例を示し、マシな方向へ誘導する気遣いは必要でしょうね。
それでもそう言うなら、議事録等に残して対応かな。
いやぁ〜 ネタですなぁ〜www

しかし、idとパスワードどっちがまちがってるかおしえてくれるなんて・・・
解析するてまが半分以下だよね。。。。組み合わせへるから・・・・

パスワードだけでアタックかけてがっちしたら
あとは、ユーザー名を総当りだなwwww そっちはどちかっていうと
コード体系ひっぱりだしゃらくだもんな・・・てなわけでwwww
講師のレベル低すぎ。
どこだか知らんけど酷い大学だよ。

ログインすると、みんなのコメントがもっと見れるよ

mixiユーザー
ログインしてコメントしよう!

Javaの課題丸投げ 更新情報

Javaの課題丸投げのメンバーはこんなコミュニティにも参加しています

星印の数は、共通して参加しているメンバーが多いほど増えます。

人気コミュニティランキング