ジメジメする梅雨のお悩み、一挙解決! >>

いつも利用しているサイトのログインページがリニューアルされて自動ログインできなくなりました。

以前はログインページのURLにIDとかPassとかを<form>で送ればログイン出来ていたので
ローカルにhtmlファイルを作成してそのソースにIDとかPassを記述しておいてリンクボタン一つで簡単にログインできるようにしておりました。

ところが新しいログインページはASP.NETで作成されているようで単純に<form>でいくつかの値を送れば良いと言うのではなくなっていまいました。

最近VS2008/C#で少しASP.NETのページを作成したりしていてボタンイベントとかポストバックとか何となく理解してはいますが、その程度の知識&理解レベルでは解決できそうにありません。

こう言った場合はもう自動ログインする方法は無いのでしょうか。

御助言をお願いいたします。

このQ&Aに関連する最新のQ&A

A 回答 (1件)

具体的にどのページなのかHTMLも見ていないので完全推測します。



form内のエレメントの名前が変わったりしていれば当然ログインできなくなります。ASP.NETはコントロールのidやnameを勝手に変えるので変わっていないか確かめてみてください。

あとは指定されたプロセスをたどっていないとはじくように設計変更されたかもしれませんね。
私の経験から言うと、ログインページ以外から来たユーザーをはじくことはそれほど難しくはありません。(セッションがない、Refererが不正などなどではじけます。偽装もできますが…)

自動ログインできるかできないか、という問いであれば方法はあります。
正しいログインプロセスを自動化するアプリケーションを用意すればよいわけで、そのようなツールがあるかどうかは分かりませんが、C#が出来るのであればC#のプロジェクトでフォームにブラウザコントロール貼り付けて自動ログインする簡易ブラウザを作ってしまう・・・とか。
    • good
    • 0
この回答へのお礼

ありがとうございます。
ソースを見ましたところsessionではありませんでしたが、viewstateが関係してそうでした。
もう少し考えてみます。

お礼日時:2009/05/18 16:49

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QASP.netで質問があります。

http://oshiete.goo.ne.jp/qa/8622954.html
 以上で質問内容がご確認できます。
 [ web.config ]がカギを握っているのかわかりませんが!?
 [ web.config ]のプログラムのを以下のURLで公開しました。 
http://homepage3.nifty.com/mtaiyo/web.config
 以上ですが、
 [ web.config ]プログラムのどこかを
 変更すれば、現在のログインユーザとパスワードで
 ログインできるようになるのでしょうか!?
 ログインユーザとパスワードを変更してもかまいません
 とにかくログインができるように成りたいです。
 よろしくお願いいたします。

Aベストアンサー

焦っておられるのはわかりますが、ASP.NETの認証プロバイダのしくみを知らないと、解決はできません。
また、ASP.NETユーザ以外のアドバイスも全部調子外れです。

基本的に、Webアプリケーションというのは、「認証」に関する処理をしなければ、URLを知っている誰でも使用できることになります。
で、これに何らかの「認証」の仕組みを入れるのですが、ASP.NETでは「Windows認証」と「Form認証」の2つの方式を用意して、その全体を「認証プロバイダ」というモジュールにまとめています。

phpなどで普通のWebアプリを作ると、アカウントとパスワードを入力させ、その値でデータベースをアクセスして、その結果(ユーザが何だとかグループがどうしたとか)をセッションというパラメータに書き込んで、さまざまなプログラムで「ユーザか否か」とか「そのユーザの機能は何か」といったふうに判断するプログラムを書くわけですが、ASP.NETの「認証プロバイダ」はこれを抽象化した機能にまとめあげ、さらに「ログインコントール」という、ログインからユーザ登録、パスワード忘れに対応した画面表示やメール送信機能まで持たせてあります。
当然、指定されたディレクトリ内のプログラムは全部、「認証された」ユーザでないと使用できません。

で、ご提示のプログラムには明らかにこの機能が使われています。
この内容に疎い人が使うのであれば、いっそ先述の「オレオレ的ユーザフレームワーク」でも使えばいいものを、きっちりLoginコントロールまで使って開発されています。

Web.configというのはプログラムではなく、プログラムで使われる「パラメータ」が書かれたファイルです。
で、ご提示のWeb.configには、「Form認証」を使用することまでは宣言されていますが、その詳細が書かれていません。元々は書かれていたものを、勝手わからず「ASP.NET管理ツール」を使って消してしまったか、ちゃんとしたWeb.configを使っていないかのどちらかです。

以下のページに、「簡単な」認証プロバイダの使用法が出ていますので、手順を追ってWeb.configを再構築してください。
http://msdn.microsoft.com/ja-jp/library/xdt4thhy(v=vs.100).aspx

「簡単な」というのは、ログイン定義やユーザ管理について、すべて自力でプログラム実装しつつ、スキーム(仕様事項)だけ認証機能プロバイダの機能を使う、といった方法に比べての話です。

何回も繰り返しますが、「認証プロバイダ」は、使わなくても「オレオレ認証」できますし、提供された機能をフルに使っても、あるいは(独自の機能をさらに追加して)カスタマイズして使っても、いっそ認証など何もつかわなくてもいい世界なのですが、前任者さんが「認証プロバイダ」の「フォーム認証」を使用していたため、その仕組みが分からないと改良できません。

理解できないなら、認証を外してもらうなり、カスタマイズしてもらうなり、再実装してもらうなり、業者かフリーランスのエンジニアでも呼んで有償改修してもらうしか道はありません。
ただその場合、「ASP.NETの認証プロバイダ」である旨をきちんと伝えないといけません。

焦っておられるのはわかりますが、ASP.NETの認証プロバイダのしくみを知らないと、解決はできません。
また、ASP.NETユーザ以外のアドバイスも全部調子外れです。

基本的に、Webアプリケーションというのは、「認証」に関する処理をしなければ、URLを知っている誰でも使用できることになります。
で、これに何らかの「認証」の仕組みを入れるのですが、ASP.NETでは「Windows認証」と「Form認証」の2つの方式を用意して、その全体を「認証プロバイダ」というモジュールにまとめています。

phpなどで普通のWebア...続きを読む

Qasp.netでのセッションを使用したログイン

asp.netでmssql server を利用してログイン機能を実装しました。
以下のようなコードでmssqlに保存してあるIDとパスが一致すれば
以降の画面ではセッションにID、パスが保存され
page loadでセッションにID、パスがなかればページがすすんでいけないような設定にしています。
機能は問題なく動作しているのですがこのような仕様はセキュリティ上問題はないのでしょうか。
商用サイトではないのですが、ある程度広域に向けたサイトを構築しようと考えておりまして、セキュリティ向上のため、工夫できるようなことがあればご意見いただきたいです。
よろしくお願いいたします。

**************************************************************
ログインページ
**************************************************************
Dim staffid As Integer
Dim staffname As String
Dim adminflag As Boolean

Protected Sub btnLogon_Click(ByVal sender As Object, ByVal e As System.EventArgs)
'ユーザーIDの入力チェック
If txtUserID.Text = "" Then
lblErr.Text = "ユーザーIDを入力してください。"
Return
End If
'パスワードの入力チェック
If txtpassword.Text = "" Then
lblErr.Text = "パスワードを入力してください。"
Return
End If

'ユーザーとパスワードの検証
If Not CheckUserPassword(txtUserID.Text, txtpassword.Text) Then
lblErr.Text = "ユーザーIDまたはパスワードが違います。"
Return
End If
'セッション変数へ値をセットする
Session("StaffID") = staffid
Session("StaffName") = staffname
Session("AdminFlag") = adminflag

End Sub

Private Function CheckUserPassword(ByVal userid As String, ByVal password As String) As Boolean
Dim ret As Boolean
Dim strSQL As String
strSQL = "SELECT staffID, staff_name, admin_flag , permission FROM tbl_staff " & _
"WHERE userID = '" & userid.Replace("'", "''") & _
"' AND password = '" & password.Replace("'", "''") & "'"

'接続文字列を取得する
Dim cnStr As String = System.Configuration.ConfigurationManager.ConnectionStrings("hogehogeConnectionString").ConnectionString()

'コネクションを定義する
Using connection As New SqlConnection(cnStr)
'コマンドを定義する
Dim command As New SqlCommand(strSQL, connection)
'コネクションを開く
connection.Open()

Try
'コマンドからデータリーダーを定義する
Dim dr As SqlDataReader = command.ExecuteReader
'データリーダーから結果を読み込む
If dr.Read Then
'対象データが存在する場合
'正しいユーザーIDとパスワードが指定されたので、
'データリーダーから読み出したデータをメンバ変数にセットする
staffid = dr("staffID")
staffname = dr("staff_name")
adminflag = dr("admin_flag")
permission = dr("permission")
ret = True
Else
'対象データが存在しない場合
'不正なユーザーIDまたはパスワードが指定された
ret = False
End If
Catch ex As Exception
'例外処理(SQLエラーなど)
ret = False
End Try

'コネクションを閉じる
connection.Close()
End Using

'結果を返して終了する
Return ret
End Function


**************************************************************
ログイン後に行くページでの設定
**************************************************************

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)

'[ユーザーID]ボックスにフォーカスをセットする

If Session("StaffID") Is Nothing Then
Response.Redirect("~/top.aspx")
ElseIf Not Session("AdminFlag") = True Then
Response.Redirect("~/top_normal.aspx")

End If

End Sub

asp.netでmssql server を利用してログイン機能を実装しました。
以下のようなコードでmssqlに保存してあるIDとパスが一致すれば
以降の画面ではセッションにID、パスが保存され
page loadでセッションにID、パスがなかればページがすすんでいけないような設定にしています。
機能は問題なく動作しているのですがこのような仕様はセキュリティ上問題はないのでしょうか。
商用サイトではないのですが、ある程度広域に向けたサイトを構築しようと考えておりまして、セキュリティ向上のため、工夫できるようなことが...続きを読む

Aベストアンサー

(1) セッションハイジャック対策 

→ フォーム認証(FormsAuthentication)を使う

http://d.hatena.ne.jp/atsukanrock/20100728/1280305074
http://d.hatena.ne.jp/teracc/20100424

(2) SQL インジェクション対策

シングルクォートのエスケープだけでは弱いかも

→SqlParameterCollection を使う

http://msdn.microsoft.com/ja-jp/library/ms998271.aspx


(3)パスワード漏洩対策

パスワードはDB上にハッシュ化(不可逆暗号化)して持つ。

仮に生データが漏れても使用できない。

QJavaScriptでIEの自動ログインについて

JavaScriptの初心者でIE上で表示されたログインボタンをクリックしたいのですが、name="ボタン名"がなくクリックできないんです。

「ie.document.MainForm(0).submit.click();」と記入してみたのですが、クリックできないんです。

下記のようなボタンをJavaScriptで押すにはどうしたらいいのでしょうか?

どなたかすいませんがご教授ください。

=====================================================
ボタンのHTML

<form name="MainForm" method="POST" action="/login" target="_self">

<table border="0" width="510">
<tr>
<td width="140"></td>

<td width="160" align="center"><input type="submit" style="width:100" value="ログイン" onClick="return buttonHandler('ok');"></td>

<td width="210"></td>
</tr>
</table>
<br>
</form>

JavaScriptの初心者でIE上で表示されたログインボタンをクリックしたいのですが、name="ボタン名"がなくクリックできないんです。

「ie.document.MainForm(0).submit.click();」と記入してみたのですが、クリックできないんです。

下記のようなボタンをJavaScriptで押すにはどうしたらいいのでしょうか?

どなたかすいませんがご教授ください。

=====================================================
ボタンのHTML

<form name="MainForm" method="PO...続きを読む

Aベストアンサー

document.MainForm.submit()

じゃダメなの?

あとは
document.MainForm.elements[0].click()
とか
document.getElementsByTagName("input")[0]
とか

var inputs = document.getElementsByTagName("input");
for (var i = 0, l = inputs.length; i < l; i++) {
var input = inputs[i];
if (input.type == "submit") {
input.click();
break;
}
}
とかしてもいいわね


人気Q&Aランキング

おすすめ情報