1

私はperlが初めてです。フォーム ページにリダイレクトする前に Cookie を設定する単純なログイン スクリプトを作成しました。考えられることはすべて試しましたが、Cookie が Safari に設定されません。いくつかの投稿はわずかな違いを示しており、私はそれらすべてを試しました。

私のコード:

my $userQuery = "SELECT user_name , password FROM egi_users WHERE user_name = '$username' AND password = '$cryptword'";
my $result = $dbh->prepare($userQuery);
$result->execute()or die "MYSQL ERROR : $DBI::errstr\n";

my $rows = $result->rows;

if($rows == 1){

    #login is valid. Create cookie and send to patient_data page.                                                                                          
    #print("success\n");                                                                                                                                   

    my $c = CGI::Cookie->new(-name=>'login_access',
                             -value=>$username,
                             -expires=>'+1h');

    print $q->redirect(-uri=>'http://mytestserver.com/cgi/patient_data.pl' , -status => '301' , -cookie => $c);


}else{

    print $q->redirect(-uri=>'http://mytestserver.com/);
}

CGI に必要と思われるものはすべて実装しました。

CGI を使用します。CGI::Carp を使用します... CG::Session を使用します。CGI::Cookie を使用します。

スクリプトは正しく検証してリダイレクトしますが、Cookie は設定されません。何をしているのかよくわかりません。アプローチでより良い提案があれば、それも素晴らしいでしょう。

ご覧いただきありがとうございます

4

1 に答える 1

2

ステータス 301 は永続的なリダイレクトです。ユーザーがログインしているかどうかを確認し、正しいユーザー名/パスワードを指定した場合に永続的なリダイレクトを提供しますか? ログアウトまたは別のユーザーとしてログインするにはどうすればよいですか? それは不可能です。

これには、Safari のキャッシュをクリアし、ステータス 303「See Other」を使用する必要があります。

また、コードは SQL インジェクション攻撃に対して脆弱です。試す:

my $userQuery = "SELECT user_name , password FROM egi_users WHERE user_name = ? AND password = ?";
my $result = $dbh->prepare($userQuery);
$result->execute($username, $cryptword)or die "MYSQL ERROR : $DBI::errstr\n";

また、ユーザー名を含む Cookie を作成するだけで、誰かがあなたのアプリにログインできるようです。パスワードが必要な人...

于 2013-04-18T23:45:15.500 に答える