
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で質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
スイッチが二台あり、別々のア...
-
vba マージエリアの行数を非表...
-
onedrive にexcelファイルをア...
-
Windowsで複数のファイルを同じ...
-
SJISで、全角文字Aの文字コード...
-
SPIの非言語の割合と比が難しく...
-
VBAでPDFを作成する際、同じ名...
-
asp.netにてgridviewの列を動的...
-
Windows10にデュアルブートでXP...
-
エクセルに張り付けた写真のフ...
-
SPO2測定
-
高校1年生情報の問題について。
-
エクセルのマクロについて教え...
-
インドe-Visa 承認書のApplicat...
-
SPIの対策は参考書でやるべきか?
-
LEDで電光掲示板に「A B C D E...
-
One Driveへのアクセス
-
LINE APIからasp.net の web サ...
-
Windows10エンタープライズ版をインス...
-
Ip アドレスて日毎に変わるんで...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「ページネーション」で検索キ...
-
PHPで値を保持する方法
-
「表参道」が「侮Q道」となる
-
php 入力画面から確認表示画面...
-
php history.back()の戻るボタ...
-
PHP、MySQLで動作する検索プロ...
-
IFRAME内PHPのセッション変数取...
-
cookieの最大数
-
ページ移動での値の保持
-
設置されているページごとに宛...
-
POSTで受け渡したものを保存し...
-
処理時間のカウント
-
session,タスク作成,formでPOST...
-
セッション使用時のフォームの...
-
asp.netでのセッションを使用し...
-
必須入力項目チェック
-
php に関して質問です。 各ユー...
-
アクセスでのデータ保存について。
-
変数を送信したいのですが……
-
ログアウト処理
おすすめ情報