
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
No.2ベストアンサー
- 回答日時:
(1) セッションハイジャック対策
→ フォーム認証(FormsAuthentication)を使う
http://d.hatena.ne.jp/atsukanrock/20100728/12803 …
http://d.hatena.ne.jp/teracc/20100424
(2) SQL インジェクション対策
シングルクォートのエスケープだけでは弱いかも
→SqlParameterCollection を使う
http://msdn.microsoft.com/ja-jp/library/ms998271 …
(3)パスワード漏洩対策
パスワードはDB上にハッシュ化(不可逆暗号化)して持つ。
仮に生データが漏れても使用できない。
セッションハイジャックというのがあるんですね。なんとくなりすましできるような気がしていたんですが、実際できるんですね。専用のフォーム認証というものがあればそれを実装する方向で考えてみたいと思います。ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 【Excel VBA】自動メール送信の機能追加 5 2022/09/29 12:53
- Visual Basic(VBA) 【VBA】写真の貼り付けコードがうまく機能しません。 5 2022/09/01 18:43
- Excel(エクセル) 2つのVBAを一緒にしたら機能しなくなりました(エクセル) 7 2022/06/02 12:41
- Visual Basic(VBA) いつもお世話になっております、VBAで教えて頂きたいのですが 2 2022/05/05 22:20
- Excel(エクセル) VBAについて 3 2022/06/19 18:19
- Visual Basic(VBA) 【前回の続き続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/24 20:49
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
- Visual Basic(VBA) VBAでoutlook365が起動しません。 4 2022/08/25 13:31
- Visual Basic(VBA) VBAが止まります。 3 2022/08/31 14:09
- Excel(エクセル) B列に文字がはいったらA列に数字が入るマクロードを完成させたい 4 2023/04/21 01:58
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
GETのメリットについて
-
asp.netでのセッションを使用し...
-
PHPでSESSIONによる変数の引き継ぎ
-
リストボックスにテキスト入力...
-
ランキングサイトのスパム登録...
-
ブラウザバックしてもチェック...
-
PHPで値を保持する方法
-
htmlspecialcharsの挙動について
-
「ページネーション」で検索キ...
-
ページに時間制限
-
VBAで重複チェックの仕方を教え...
-
ログイン後の処理
-
ログイン画面から入って、「戻...
-
バッチファイルでpingの結果を...
-
wordの差し込み印刷で文字...
-
URLのパラメータをGETのままで...
-
Dosブロンプトでtabを出力したい
-
「取得先」という表現について
-
Yahoo! JAPAN IDを新規取得でき...
-
【C#】DataGridViewの最大列数...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
IFRAME内PHPのセッション変数取...
-
PHPで値を保持する方法
-
POSTで受け渡したものを保存し...
-
cURL関数を使用したphpからのpo...
-
php 入力画面から確認表示画面...
-
htmlspecialcharsについて
-
php history.back()の戻るボタ...
-
セッションを使用したページ遷移
-
ログイン画面から入って、「戻...
-
ブラウザの戻るボタンで重複登...
-
「ページネーション」で検索キ...
-
閉じるボタン「×」を制御したい
-
動的にhtmlテーブルを表示
-
PHP+MySQLからHTMLページを自動...
-
ブラウザバックしてもチェック...
-
PHP+MySQLで型の整合について
-
HTMLエスケープ処理とデーター...
-
登録確認メールのリンクURLにメ...
-
PHP スマーティ
-
VBAで重複チェックの仕方を教え...
おすすめ情報