ASP プログラミング初心者のための基本ルール 1. 初心者が犯しやすい間違い
フォーラムの多くの投稿のコードで、フィールドの種類が間違っているという一般的な基本的なエラーを確認しました。
プログラムとデータベースは密接に関係しています。テキスト型または時刻型のデータベース フィールドは一重引用符を使用します。
たとえば、次の変更されたステートメントは次のとおりです。
conn.execute update カウント set counts='&counts&' where num=&num& および Atime='&now()&'
等号の左側がフィールド名、等号の右側が渡される変数名です。 counts フィールドはテキスト型なので、書き込みの前後に一重引用符を追加する必要があることも同様です。後続の検索ステートメントでは、num フィールドは数値型であるため、その前後に一重引用符はありません。Atime フィールドは時間型であるため、前後に一重引用符が必要です。
最も重要なことは、ID によってクエリを実行することです。ID フィールドは一意であり、ID 番号をクエリするときに前後に一重引用符を含めることはできません。
conn.execute update Counts set counts='&counts&' where id='&id&' '書き方が間違っています
conn.execute update Counts set counts='&counts&' where id=&id '正しい書き方
2.ACCESSデータベース接続
通常、データベースに接続するには 2 つの方法があり、初心者はどちらの方法を使用するか、どのような状況でどちらを使用するか、または両方の原理を知りません。
①データベースファイルに直接接続する
conn = Server.CreateObject(ADODB.Connection) を設定します
conn.Open DRIVER={Microsoft Access ドライバー (*.mdb)}; DBQ=&Server.MapPath(database/yanhang.mdb)
②データソース経由でデータベースファイルを接続する
conn = Server.CreateObject(ADODB.Connection) を設定します
conn.Open プロバイダー = Microsoft.Jet.OLEDB.4.0; データ ソース =&Server.MapPath(database/yanhang.mdb)
では、2 つのうちどちらが優れているのでしょうか? もちろん 2 つ目です。1 つ目はクライアント ブラウザが実際にデータベースを読み取るため、セキュリティが大きく異なります。2 つ目はデータ ソースを介して接続されます。サーバー データを使用します。ソース ツールは接続されており、クライアントとは何の関係もないため、データベースはクライアントに公開されず、セキュリティ係数ははるかに高くなります。
ACCESSデータベース対応プログラムの応用例: ①データベースファイルに直接接続
conn.Open DRIVER={Microsoft Access ドライバー (*.mdb)}; DBQ=&Server.MapPath(database/yanhang.mdb)
このデータベース接続方法では、次のステートメントを追加します。
set rs=server.createobject(adodb.recordset) '(正しい書き方)
rs.open select * from dndj,conn,1,3
rs.addnew
rs(bh) = bh
rs(bm) = bm
rs(xm) = xm
rs(xsq) = xsq
rs.アップデート
rs.close
rs=何も設定しない
set rs=server.createobject(adodb.recordset) '(書き間違い)
sql=dndj(bh,bm,xm,xsq) に挿入 value('bh','bm','xm','xsq')
rs.open SQL,conn,1,3
ACCESSデータベース対応プログラムの応用:②データソースを介してデータベースファイルを接続
conn.Open プロバイダー = Microsoft.Jet.OLEDB.4.0; データ ソース =&Server.MapPath(database/yanhang.mdb)
このデータベース接続方法では、次のステートメントを追加します。
conn.execute insert into dndj(bh,bm,xm,xsq) value('&bh&','&bm&','&xm&','&xsq&') '(正しい書き方)
set rs=server.createobject(adodb.recordset) '(書き間違い)
sql=dndj(bh,bm,xm,xsq) に挿入 value('bh','bm','xm','xsq')
rs.open SQL,conn,1,3
3. ダブルクォーテーションの適用
通常、次のようなスーパー リンクを作成します <a href=abc.asp?id=<%=rs(id)%>>スーパー リンク</a>
しかし、このハイパーリンクが ASP にコンパイルされたらどうなるでしょうか?
response.write <a href=abc.asp?id=&rs(id)&>スーパーコネクション</a> '(正しい書き方)
response.write <a href='abc.asp?id=&rs(id)&'>スーパーコネクション</a> '(正しい書き方)
response.write <a href=abc.asp?id=&rs(id)&>スーパーコネクション</a> '(正しい書き方)
response.write <a href=abc.asp?id=<%=rs(id)%>>スーパーコネクション</a> '(間違った書き方)
response.write <a href=abc.asp?id=&rs(id)&>スーパーコネクション</a> '(間違った書き方)
フォームは asp <input type=text name=id value=<%rs(id)%> /> にコンパイルされます。
response.write <input type=text name=id value=&rs(id)& /> '(正しい書き方) 注: ここには二重引用符が 3 つあります。
response.write <input type='text' name='id' value='&rs(id)&' /> '(正しい書き方)
response.write <input type=text name=id value=&rs(id)& /> '(正しい書き方)
response.write <input type=text name=id value=<%=rs(id)%> /> '(書き方が間違っています)
response.write <input type=text name=id value=&rs(id)& /> '(書き方が間違っています)
初心者のための ASP プログラミングの基本ルール
4. ACCESSデータベースのダウンロードを防ぐいくつかの方法
多くの動的サイトではデータベースが広範囲に使用されており、データベースは自然にサイトのコア ファイルになっています。データベースが違法にダウンロードされると、悪意のある者が Web サイトを破壊する可能性が非常に高くなります。あるいは情報を盗む。
以下に示す方法は、仮想ホスト空間を使用するユーザーと IIS 制御権限を持つユーザーに適用されます。
1: 仮想ホストスペースの購入は、IIS 制御を持たないユーザーに適しています
1: 想像力を働かせてデータベースのファイル名を変更します。
これが最も基本的なものです。今さらデータベースのファイル名を変更するのが面倒な人も多いのではないでしょうか? 何を変更するかについては、少なくともファイル名が複雑で推測できないものにする必要があります。もちろん、現時点では、データベースが配置されているディレクトリにはディレクトリの参照権限を持つことはできません。
2: データベース名のサフィックスを ASA、ASP などに変更します。
これは非常に人気があると聞いていますが、何度もテストしたところ、本当にダウンロードを防止したい場合は、バイナリフィールドやその他の設定を追加する必要があることがわかりました。複雑 (データベースに多数のデータがある場合、この方法は実際にはあまり良くありません)
3: データベース名の前に # を追加します
データベース ファイルの先頭の名前に # を追加し、データベース接続ファイル (conn.asp など) 内のデータベース アドレスを変更するだけです。ダウンロードする際は、# 記号より前の部分のみが認識されるのが原則で、たとえば http://bbs.bccn.net/date/#123 をダウンロードする場合、次の部分は自動的に削除されます。 .mdb (存在すると仮定)。 IEでもFLASHGETでも、得られるのは http://bbs.bccn.net/date/index.htm
さらに、データベース ファイル名にスペースを保持することも同様の役割を果たします。アドレス解決の HTTP プロトコルの特性により、スペースは http://bbs.bccn.net/date のように %20 としてエンコードされます。 /123 456.mdb
ダウンロードする場合は、http://bbs.bccn.net/date/123%20456.mdb を参照してください。私たちのディレクトリにはファイル 123%20456.mdb がまったくないため、データベース アドレスを公開しても、他の人はそれをダウンロードできません。http などの両方のメソッドで #+スペースを使用するのが最善です。 : //bbs.bccn.net/date/#123 456.mdb
4: データベースを暗号化する
ACCESS を使用してデータベースを排他モードで開いた後、[ツール] - [セキュリティ] - [データベース パスワードの設定] に移動し、暗号化後にデータベース接続ページを次のように変更します。
conn.open driver={Microsoft アクセス ドライバー (*.mdb)};uid=admin;pwd=データベース パスワード;dbq=データベース パス
この変更後は、データベースがダウンロードされても、他の人はそのデータベースを開くことができなくなります (データベース接続ページのパスワードが漏洩していない限り)。
ただし、Access データベースの暗号化メカニズムは比較的単純であるため、パスワードが設定されている場合でも復号化が簡単であることは注目に値します。データベースシステムは、ユーザーが入力したパスワードと固定キーのXOR演算により暗号化文字列を形成し、*.mdbファイルのアドレス&H42から始まる領域に格納します。したがって、優れたプログラマは、Access データベースのパスワードを簡単に取得するための数十行の小さなプログラムを簡単に作成できます。したがって、データベースがダウンロードされる限り、そのセキュリティは不明のままです。
2: ホスト制御を行う (もちろん、ここでも仮想空間設定を使用できます)
5: データベースは WEB ディレクトリの外に配置されます
WEB ディレクトリが e:/webroot の場合は、データベースを e:/data フォルダに置き、e:/webroot のデータベース接続ページに移動します。
データベース接続アドレスを ../data/#123 456.mdb の形式に変更すると、データベースを正常に呼び出すことができますが、データベースは WEB ディレクトリにないためダウンロードできません。この方法は通常、仮想空間を購入するユーザーに適しています。
6: ODBC データソースを使用します。
ASP などのプログラミングでは、可能であれば ODBC データ ソースを使用し、プログラム中にデータベース名を記述しないようにしてください。そうしないと、ASP ソース コードの機密性とともにデータベース名が失われます。
例えば:
conn.open driver={Microsoft Access Driver (*.mdb)};dbq=&Server.MapPath(../123/abc/asfadf.mdb)
データベースの名前がどれほど奇妙であっても、隠しディレクトリがどれほど深くても、ASP ソース コードが侵害されると、簡単にダウンロードされてしまうことがわかります。
ODBC データ ソースを使用する場合、conn.open ODBC-DSN 名ではそのような問題は発生しませんが、ディレクトリを移動すると、データ ソースをリセットする必要があります。
7: MDBなどのデータベース名の拡張マッピングを追加
この方法は、IIS 設定を変更することによって実現されます。これは、IIS 制御を持つ友人には適していますが、仮想ホストを購入するユーザーには適していません (管理者が設定していない場合)。現時点ではこの方法がベストだと思います。 1 つの変更を加えるだけで、サイトのデータベース全体がダウンロードされないようにすることができます。コードを変更することなく、ターゲットアドレスが公開された場合でもダウンロードを防ぐことができます。
設定:
IIS のプロパティ --- ホーム ディレクトリ --- 構成 --- マッピング --- アプリケーション拡張機能に .mdb ファイルのアプリケーション解析を追加します。ここで選択する DLL (または EXE など) は任意ではないようです。選択が適切でない場合でも、asp.dll などを選択しない方がよいことに注意してください。自分でテストできます
この変更を行った後、http://bbs.bccn.net/data/dvbbs6.mdb などのデータベースをダウンロードします。と表示されます(404や500などのエラー)
8: .net を使用する利点
Dongwang の Mu Niao は、ファイルの違法ダウンロードを防止する WBAL アンチホットリンク ツールを作成しました。かつてこのフォーラムの専門家が、IIS にロードされる .dll であるデータベース ダウンロード対策プラグインを公開したことを覚えています。
ただし、これはローカル以外のダウンロードを防止するだけであり、データベースのダウンロードを真に防止する機能はありません。ただし、この方法は 5 番目の方法と似ています。
.NET ファイルをローカルにダウンロードできないように変更できます。
これらの方法のうち、一律に変更できるのは 7 番目と 8 番目の方法だけで、一度設定を変更すると、サイト全体のデータベースがダウンロードされないようにすることができます。他のいくつかの方法は、それぞれデータベース名と接続ファイルを変更する必要があります。さらに面倒ですが、バーチャルホストの友達の場合はこれしかできません。
実際には、6 番目の方法は 5 番目の方法を拡張したものであり、特別な機能を実現できます。ただし、.net をサポートしていないホストや面倒な設定が怖いホストの場合は、5 番目の方法を直接使用することをお勧めします。 6 番目の方法がデフォルトで使用されます。同じホストのフォーラムまたはゲストブックにコピーして接続し、クリックしてダウンロードすることで公開できます (そのような参照ページは同じホストからのものであるため)。
これらの方法にはそれぞれ長所と短所があるため、選択して使用してください。これらの方法は完全に安全というわけではなく、Web サイト管理者は、一部のシステムのセキュリティや、ASP コード自体の作成のセキュリティにも注意を払う必要があります。そうしないと、誰かがデータベースをダウンロードしたり変更したりする可能性があります。