推奨:DHTML XML ASP CSSのツリーディレクトリについて話すTree Directoryはプログラムの問題説明:自己関連のデータテーブルがプロジェクトに登場することがよくあります。全体的な観点からそれらを見ると、テーブル全体がツリーデータ構造として表示されます(複雑な場合、グラフになる可能性があります)。このテーブルを行うとき
ASPプログラミングでは、アイデンティティ認証は頻繁に使用されると言えます。しかし、どのようにして認証セキュリティを実現できますか?
フォーム提出ページ:sub.htm
| 以下は引用されたコンテンツです。 <html> <head> <title>管理者ログイン/title> <body> <form name = form1 method = post action = sub.asp> <p>管理者: <入力タイプ=テキスト名= userIdサイズ= 25 maxlength = 20> パスワード: <入力タイプ=テキスト名=パスサイズ= 12 maxlength = 20> <入力タイプ=送信name = submit value = submit> </p> </form> </body> </html> |
| 以下は引用されたコンテンツです。 sub.aspプログラム <% フォームからデータを受信します user = request.from(userid) フォームで送信されたデータが空であるかどうかを確認します(フォームページはJavaScriptまたはVBScriptによって制御される場合がありますが、ここで制御することを忘れないでください! user = thenの場合 エラープロンプトページに移動してください! Response.redirect err1.htm この文は役に立たないかもしれませんが、追加する方が良いです! Response.End ifを終了します pass = request.from(pass) pass = thenの場合 Response.redirect err2.htm Response.End ifを終了します データベースに参加します file = server.mappath(データベース) conn = server.createObject(adodb.connection)を設定します dr = driver = {microsoftアクセスドライバー(*.mdb)}; dbq =&file conn.open dr rs = server.createObject(adodb.Recordset)を設定します 重要なのは、ここのSQL言語です sql = select * user =&user&and pass =&pass& rs.open sql rs.eofではない場合 見つかった場合は、管理ページに移動します reponse.redirect login.asp それ以外 見つからない場合は、エラーページを入力します respons.write err3.htm ifを終了します %> |
誰もが上記のコードは問題ないはずだと感じていますが、ここに深刻なセキュリティリスクがあります。
管理者にログインしたい場合は、sub.htmフォーム入力ボックスに入力できます。
最初のテキストボックスに入力してください:aまたは1 = 1またはまたは=
2番目のテキストボックスに入力してください:aまたは1 = 1またはまたは=
それを提出してください、あなたは見るでしょう...うわー、私に耳を傾けてください、それはやるのは良いですか、レンガは再び投げられます...
Aと1は任意の文字です
なぜこれらのキャラクターを管理者として入力するのかと誰かが尋ねるかもしれません。 ?
実際、これらのキャラクターは、プログラムのSQL言語に対する欺ceptionであり、正常に入力されています。
誰もが参照してください:Start The Program SQLは、テーブルを照会し、ユーザー=&ユーザー&&Pass =&Pass&条件を満たすレコードです。
sql = select * user =&user&and pass =&pass&
上記のコードを入力しましたが、次のようになりました。
sql = select * from table where user = aまたは1 = 1およびpass = aまたは1 = 1
見てみましょう、入場しない理由はありますか? ?最初に入らない理由をください!
上記のユーザーパスフィールドは文字タイプであり、数値タイプの場合、同じことが当てはまります!
解決:
1。関数代替方法:
交換を使用して、ユーザーによるコンテンツ入力を特殊文字に置き換えて、制御目的を達成してください! sql = select * user =&from user =&from&from(user、、)&and and pass =&leplage(pass、、)&&
この方法は、一度に1つの文字を置き換えることができます。実際、危険なキャラクターだけでなく、>、<、&、%などのキャラクターも完全に制御する必要があります。しかし、交換機能に能力がないように見えた場合はどうすればよいですか? ?
2。プログラム制御方法
プログラムを使用して、クライアントが入力したすべてのコンテンツを制御して、クライアントが入力した危険なキャラクターまたはコードを完全に制御できるようにします。この方法をします!
| 以下は引用されたコンテンツです。 <% ユーザーが送信したフォームコンテンツをキャプチャします user = request.from(user) pass = request.from(pass) ... サイクル制御が始まります i = 1 to len(user) MID関数を使用して、変数ユーザーのIポジションで文字を読み取る us = mid(user、i、1) 読み取り文字の比較 us =またはus =%またはus = <またはus =>またはus =& 上記の文字が含まれている場合、エラーメッセージが発生します。上記の特殊文字を抑えることはできません。 Response.redirect err2.htm Response.End ifを終了します 次 ... %> |
共有:ASPとストアドプロシージャを解析しますASPとストアドプロシージャに関する多くの記事がありますが、著者が実際にそれを実践しているとは思いません。私が最初にいたときに多くの関連情報を読みましたが、提供された方法の多くは実際にはそうではないことがわかりました。簡単なアプリケーションの場合、これ