ASPプログラミングでは、本人認証がよく使われると言えます。しかし、どうすれば認証セキュリティを実現できるのでしょうか?
フォーム送信ページ: sub.htm
<html>
<頭>
<title>管理者ログイン</title>
<本文>
<form name="form1" method="post" action="sub.asp">
<p>管理者:
<input type="text" name="ユーザーID" size="25" maxlength="20">
パスワード:
<input type="text" name="パス" size="12" maxlength="20">
<input type="submit" name="submit" value="submit">
</p>
</form>
</body>
</html>
SUB.asp プログラム
<%
フォームからデータを受け取る
user=request.from("ユーザーID")
フォームによって送信されたデータが空かどうかを確認します (JAVASCRIPT または VBSCRIPT を使用してフォーム ページを制御できますが、ここで制御することを忘れないでください。
ユーザー = "の場合、その後
エラーメッセージページにアクセスしてください!
応答.リダイレクト「err1.htm」
この文は役に立たないかもしれませんが、追加すると良いでしょう。
応答.終了
終了する場合
pass=request.from("パス")
pass="" の場合
応答.リダイレクト「err2.htm」
応答.終了
終了する場合
データベースに参加する
file=server.mappath("あなたのデータベース")
set conn=server.createobject("adodb.connection")
dr="ドライバー={Microsoft アクセス ドライバー (*.mdb)};dbq="&file
conn.open dr
set rs=server.createobject("adodb.recordset")
ここで重要なのは SQL 言語です
sql="select * from table where user= "&user&" and pass= "&pass&" "
rs.open SQL
そうでない場合は、
見つかったら管理ページにアクセスしてください。
応答.リダイレクト「ログイン.asp」
それ以外
見つからない場合は、エラー ページが表示されます。
応答.write "err3.htm"
終了する場合
%>
上記のコードは大丈夫だと誰もが思っていますが、ここには重大なセキュリティ リスクがあります。
管理者にログインしたい場合は、SUb.htm フォームの入力ボックスに入力できます。
最初のテキスト ボックスに次のように入力します。または 1 = 1 または OR =
2 番目のテキスト ボックスに入力します: a または 1 = 1 または OR =
送信すると、全員が見ることになります... 「ああ、聞いてください、わかりました、後でレンガを投げます...」
「a 」と「1」は任意の文字です。
これらの文字を入力するときに、なぜ管理者として入力するのかと疑問に思う人もいるかもしれません。 ?
実際、これらの文字はプログラム内の SQL 言語を欺いているものです。正常に入力できた方は、
次を参照してください。プログラム SQL を開始すると、user= "&user&" および pass= " を満たすレコードがテーブルにクエリされます。 &pass&" "conditions
sql="select * from table where user= "&user&" and pass= "&pass&" "
上記のコードを入力すると、次のようになりました。
sql="select * from table where user= a or 1 = 1 and pass= a or 1 = 1 "
そうですね、入力しない理由はありますか? ? 入力しない理由を教えてください!
上記の USER PASS フィールドが数値の場合も同様です!
解決策:
1.
REPLACE を使用します。 特殊文字を置き換えます。制御目的を達成するためにユーザーが入力したコンテンツ内で! sql="select * from table where user= "&replace(user," "," ")&" and pass= "&replace(pass," "," ")& 「 」
この方法で置換できるのは一度に 1 文字だけです。実際、危険な文字は「 」だけでなく、「>」、「<」、「&」、「%」などの文字も含まれます。
2. プログラム制御方式
では、クライアントが入力したすべての内容をプログラムで制御するため、ユーザーが入力した可能性のある危険な文字やコードは検出されません
。
完全にコントロールしてください、これが私の方法です。
<%
ユーザーが送信したフォームのコンテンツをキャプチャする
ユーザー=リクエスト.フロム("ユーザー")
pass=request.from("パス")
...
ループ制御開始
for i=1 から len(user)
MID 関数を使用して、変数 user の位置 i にある文字を読み取ります。
us=mid(ユーザー,i,1)
読み取った文字を比較する
us=" " または us="%" または us="<" または us=">" または us="&" の場合
上記の文字が含まれる場合、エラー メッセージが表示されます。上記の特殊文字は使用できません。
応答.リダイレクト「err2.htm」
応答.終了
終了する場合
次
...
%>