Grundregeln für Anfänger in der ASP-Programmierung 1. Häufige Fehler, die Anfänger machen
Ich habe im Code vieler Beiträge im Forum einen häufigen Grundfehler gesehen, nämlich den falschen Feldtyp.
Das Programm und die Datenbank sind eng miteinander verbunden. Datenbankfelder vom Typ Text oder Zeit verwenden einfache Anführungszeichen.
Beispielsweise die folgende geänderte Anweisung:
conn.execute update Counts set counts='&counts&' where num=&num& and Atime='&now()&'
Die linke Seite des Gleichheitszeichens ist der Feldname und die rechte Seite des Gleichheitszeichens ist der übergebene Variablenname. Das Zählfeld ist vom Typ Text, daher müssen vor und nach dem Schreiben einfache Anführungszeichen hinzugefügt werden. Es ist dasselbe Unabhängig davon, ob es sich um eine Schreib- oder Abfrageanweisung handelt, ist das Feld „num“ vom Typ „numerisch“, daher gibt es keine einfachen Anführungszeichen davor und danach. Das Feld „Atime“ ist vom Typ „time“, daher sind davor und danach einfache Anführungszeichen erforderlich.
Das Wichtigste ist die Abfrage nach ID. Das ID-Feld ist eindeutig und vom numerischen Typ. Bei der Abfrage der ID-Nummer dürfen natürlich keine einfachen Anführungszeichen stehen.
conn.execute update Counts set counts='&counts&' where id='&id&' 'falsche Schreibweise
conn.execute update Counts set counts='&counts&' where id=&id 'Richtige Schreibweise
2. ACCESS-Datenbankverbindung
Normalerweise gibt es zwei Möglichkeiten, eine Verbindung zu Datenbanken herzustellen. Anfänger wissen grundsätzlich nicht, welche Methode sie verwenden sollen oder unter welchen Umständen sie verwenden sollen, oder sie kennen die Prinzipien beider nicht.
① Direkte Verbindung zu Datenbankdateien herstellen
Setze conn = Server.CreateObject(ADODB.Connection)
conn.Open DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=&Server.MapPath(database/yanhang.mdb)
②Verbinden Sie die Datenbankdatei über die Datenquelle
Setze conn = Server.CreateObject(ADODB.Connection)
conn.Open Provider=Microsoft.Jet.OLEDB.4.0; Data Source=&Server.MapPath(database/yanhang.mdb)
Welches der beiden ist also besser? Natürlich ist es das zweite, denn das erste ist, dass der Client-Browser die Datenbank tatsächlich direkt liest, sodass die Sicherheit ganz anders ist. Das zweite ist über die Datenquelle verbunden. welches Serverdaten verwendet Das Quelltool ist mit dem Client verbunden und hat nichts mit dem Client zu tun, sodass die Datenbank dem Client nicht zugänglich gemacht wird und der Sicherheitsfaktor viel höher ist.
Anwendung des entsprechenden ACCESS-Datenbankprogramms: ① Direkte Verbindung zu Datenbankdateien
conn.Open DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=&Server.MapPath(database/yanhang.mdb)
Fügen Sie für diese Datenbankverbindungsmethode die Anweisung hinzu:
set rs=server.createobject(adodb.recordset) '(richtige Schreibweise)
rs.open select * from dndj,conn,1,3
rs.addnew
rs(bh) = bh
rs(bm) = bm
rs(xm) = xm
rs(xsq) = xsq
rs.update
rs.close
setze rs=nichts
set rs=server.createobject(adodb.recordset) '(falsche Schreibweise)
sql=insert into dndj(bh,bm,xm,xsq) Values('bh','bm','xm','xsq')
rs.open sql,conn,1,3
Anwendung des ACCESS-Datenbank-entsprechenden Programms: ② Datenbankdateien über Datenquellen verbinden
conn.Open Provider=Microsoft.Jet.OLEDB.4.0; Data Source=&Server.MapPath(database/yanhang.mdb)
Fügen Sie für diese Datenbankverbindungsmethode die Anweisung hinzu:
conn.execute insert into dndj(bh,bm,xm,xsq) Values('&bh&','&bm&','&xm&','&xsq&') '(richtige Schreibweise)
set rs=server.createobject(adodb.recordset) '(falsche Schreibweise)
sql=insert into dndj(bh,bm,xm,xsq) Values('bh','bm','xm','xsq')
rs.open sql,conn,1,3
3. Verwendung doppelter Anführungszeichen
Normalerweise schreiben wir einen Superlink wie diesen <a href=abc.asp?id=<%=rs(id)%>>Superlink</a>
Aber was ist, wenn dieser Hyperlink in ASP kompiliert wird?
Response.write <a href=abc.asp?id=&rs(id)&>Super Connection</a> '(richtige Schreibweise)
Response.write <a href='abc.asp?id=&rs(id)&'>Super Connection</a> '(richtige Schreibweise)
Response.write <a href=abc.asp?id=&rs(id)&>Super Connection</a> '(richtige Schreibweise)
Response.write <a href=abc.asp?id=<%=rs(id)%>>Super Connection</a> '(falsche Schreibweise)
Response.write <a href=abc.asp?id=&rs(id)&>Super Connection</a> '(falsche Schreibweise)
Das Formular wird in asp <input type=text name=id value=<%rs(id)%> /> kompiliert
Response.write <input type=text name=id value=&rs(id)& /> '(richtige Schreibweise) Hinweis: Hier gibt es drei doppelte Anführungszeichen
Response.write <input type='text' name='id' value='&rs(id)&' /> '(richtige Schreibweise)
Response.write <input type=text name=id value=&rs(id)& /> '(korrekte Schreibweise)
Response.write <input type=text name=id value=<%=rs(id)%> /> '(falsche Schreibweise)
Response.write <input type=text name=id value=&rs(id)& /> '(falsche Schreibweise)
Grundregeln der ASP-Programmierung für Anfänger
4. Mehrere Methoden, um zu verhindern, dass die ACCESS-Datenbank heruntergeladen wird
Viele dynamische Sites nutzen in großem Umfang Datenbanken, und die Datenbank ist natürlich zur Kerndatei einer Site geworden. Sobald die Datenbank illegal heruntergeladen wird, besteht eine hohe Wahrscheinlichkeit, dass böswillige Personen die Website zerstören. Oder Informationen stehlen.
Die unten bereitgestellten Methoden gelten für Benutzer, die virtuellen Hostraum verwenden, und Benutzer mit IIS-Kontrollrechten!
1: Der Kauf von virtuellem Hostplatz ist für diejenigen geeignet, die keine IIS-Kontrolle haben
1: Lassen Sie Ihrer Fantasie freien Lauf, um den Namen der Datenbankdatei zu ändern
Dies ist das Grundlegendste. Ich glaube nicht, dass es viele Leute gibt, die jetzt zu faul sind, den Namen der Datenbankdatei zu ändern, oder? Was Sie ändern möchten, liegt bei Ihnen. Stellen Sie zumindest sicher, dass der Dateiname komplex und nicht zu erraten ist. Natürlich kann das Verzeichnis, in dem sich Ihre Datenbank befindet, derzeit nicht über die Berechtigung zum Durchsuchen von Verzeichnissen verfügen!
2: Ändern Sie das Suffix des Datenbanknamens in ASA, ASP usw.
Ich habe gehört, dass dies sehr beliebt ist, aber ich habe es viele Male getestet und festgestellt, dass es nicht ideal ist. Wenn Sie Downloads wirklich verhindern möchten, müssen Sie einige Binärfelder und andere Einstellungen hinzufügen komplex (wenn Ihre Datenbank viele hat. Wenn ja, ist diese Methode wirklich nicht sehr gut)
3: Fügen Sie # vor dem Datenbanknamen hinzu
Fügen Sie einfach # zum Frontnamen der Datenbankdatei hinzu und ändern Sie dann die Datenbankadresse in der Datenbankverbindungsdatei (z. B. conn.asp). Das Prinzip besteht darin, dass beim Herunterladen nur der Teil vor dem #-Zeichen erkannt wird und die folgenden Teile automatisch entfernt werden. Wenn Sie beispielsweise Folgendes herunterladen möchten: http://bbs.bccn.net/date/#123 .mdb (vorausgesetzt, es existiert). Unabhängig davon, ob es sich um IE oder FLASHGET usw. handelt, erhalten Sie http://bbs.bccn.net/date/index.htm
Darüber hinaus spielt die Beibehaltung einiger Leerzeichen im Datenbankdateinamen eine ähnliche Rolle. Aufgrund der Besonderheit des HTTP-Protokolls für die Adressauflösung werden Leerzeichen als %20 codiert, z. B. http://bbs.bccn.net/date /123 456.mdb
Beim Herunterladen http://bbs.bccn.net/date/123%20456.mdb. In unserem Verzeichnis befindet sich die Datei 123%20456.mdb überhaupt nicht, daher ist der Download ungültig. Auch wenn Sie die Datenbankadresse offenlegen, können andere sie im Allgemeinen nicht herunterladen. Verwenden Sie am besten #+Leerzeichen in beiden Methoden : //bbs.bccn.net/date/#123 456.mdb
4: Verschlüsseln Sie die Datenbank
Nachdem Sie ACCESS zum Öffnen Ihrer Datenbank im exklusiven Modus verwendet haben, gehen Sie zu „Extras-Sicherheit“ – „Datenbankkennwort festlegen“ und ändern Sie die Datenbankverbindungsseite nach der Verschlüsselung, z. B.:
conn.open Driver={Microsoft Access Driver (*.mdb)};uid=admin;pwd=Datenbankkennwort;dbq=Datenbankpfad
Selbst wenn die Datenbank nach dieser Änderung heruntergeladen wurde, können andere sie nicht öffnen (vorausgesetzt, das Passwort auf Ihrer Datenbankverbindungsseite wurde nicht durchgesickert).
Es ist jedoch zu beachten, dass die Entschlüsselung einfach ist, selbst wenn ein Kennwort festgelegt ist, da der Verschlüsselungsmechanismus der Access-Datenbank relativ einfach ist. Das Datenbanksystem bildet eine verschlüsselte Zeichenfolge, indem es das vom Benutzer eingegebene Passwort mit einem festen Schlüssel XOR-verknüpft und diese im Bereich der *.mdb-Datei ab Adresse &H42 speichert. Ein guter Programmierer kann also problemlos ein kleines Programm mit Dutzenden von Zeilen erstellen, um problemlos das Passwort einer beliebigen Access-Datenbank zu erhalten. Daher bleibt die Sicherheit der Datenbank unbekannt, solange sie heruntergeladen wird.
Zweitens: Host-Kontrolle haben (natürlich können hier weiterhin die Einstellungen für den virtuellen Raum verwendet werden)
5: Die Datenbank wird außerhalb des WEB-Verzeichnisses platziert
Wenn Ihr WEB-Verzeichnis e:/webroot ist, können Sie die Datenbank im Ordner e:/data ablegen und zur Datenbankverbindungsseite in e:/webroot wechseln.
Ändern Sie die Datenbankverbindungsadresse in die Form: ../data/#123 456.mdb, sodass die Datenbank normal aufgerufen, aber nicht heruntergeladen werden kann, da sie sich nicht im WEB-Verzeichnis befindet! Diese Methode eignet sich grundsätzlich für Nutzer, die virtuellen Raum erwerben.
6: ODBC-Datenquelle verwenden.
Bei der Programmierung wie ASP sollten Sie nach Möglichkeit versuchen, ODBC-Datenquellen zu verwenden und den Datenbanknamen nicht in das Programm zu schreiben. Andernfalls geht der Datenbankname zusammen mit der Vertraulichkeit des ASP-Quellcodes verloren.
Zum Beispiel:
conn.open drivers={Microsoft Access Driver (*.mdb)};dbq=&Server.MapPath(../123/abc/asfadf.mdb)
Es ist ersichtlich, dass der ASP-Quellcode nach der Kompromittierung problemlos heruntergeladen werden kann, egal wie seltsam der Name der Datenbank ist und wie tief das versteckte Verzeichnis ist.
Wenn Sie eine ODBC-Datenquelle verwenden, tritt dieses Problem nicht auf: conn.open ODBC-DSN-Name, aber das ist ärgerlicher. Wenn das Verzeichnis verschoben wird, muss die Datenquelle zurückgesetzt werden!
7: Erweiterte Zuordnung von Datenbanknamen wie MDB hinzufügen
Diese Methode wird durch Ändern der IIS-Einstellungen erreicht. Sie eignet sich für Freunde, die über IIS-Kontrolle verfügen, ist jedoch nicht für Benutzer geeignet, die virtuelle Hosts erwerben (es sei denn, der Administrator hat sie eingerichtet). Ich denke, diese Methode ist derzeit die beste. Mit nur einer Änderung kann verhindert werden, dass die gesamte Datenbank der Website heruntergeladen wird. Downloads können verhindert werden, selbst wenn die Zieladresse offengelegt wird, ohne den Code zu ändern.
aufstellen:
Fügen Sie die Anwendungsanalyse der .mdb-Datei in IIS-Eigenschaften---Home-Verzeichnis---Konfiguration---Zuordnung---Anwendungserweiterung hinzu. Beachten Sie, dass die hier ausgewählte DLL (oder EXE usw.) nicht willkürlich zu sein scheint. Wenn die Auswahl nicht geeignet ist, kann die MDB-Datei trotzdem heruntergeladen werden. Beachten Sie, dass es am besten ist, asp.dll usw. auszuwählen. Sie können es selbst testen
Laden Sie nach dieser Änderung die Datenbank herunter, z. B.: http://bbs.bccn.net/data/dvbbs6.mdb. Es wird angezeigt (Fehler wie 404 oder 500)
8: Vorteile der Verwendung von .net
Mu Niao aus Dongwang hat ein WBAL-Anti-Hotlink-Tool geschrieben, um das illegale Herunterladen von Dateien zu verhindern. Ich erinnere mich, dass ein Experte in diesem Forum einmal ein Anti-Download-Plugin für Datenbanken veröffentlicht hat, bei dem es sich um eine in IIS geladene DLL handelt.
Diese verhindert jedoch nur nicht-lokale Downloads und hat nicht die Funktion, Datenbank-Downloads wirklich zu verhindern. Diese Methode ähnelt jedoch der 5. Methode
Sie können die .NET-Datei so ändern, dass sie nicht lokal heruntergeladen werden kann!
Von diesen Methoden können nur die 7. und 8. Methode einheitlich geändert werden. Nach einmaliger Änderung der Konfiguration kann verhindert werden, dass die Datenbank der gesamten Site heruntergeladen wird. Die anderen Methoden erfordern eine Änderung des Datenbanknamens bzw. der Verbindungsdatei mühsamer, aber für virtuelle Gastgeberfreunde ist dies nur möglich!
Tatsächlich sollte die 6. Methode eine Erweiterung der 5. Methode sein, die spezielle Funktionen erreichen kann. Für Hosts, die .net nicht unterstützen oder Angst vor problematischen Einstellungen haben, ist es jedoch besser, die 5. Methode direkt zu verwenden Standardmäßig wird die 6. Methode verwendet. Sie können weiterhin veröffentlichen, indem Sie eine Verbindung zum Forum oder Gästebuch desselben Hosts herstellen und dann zum Herunterladen klicken (da solche Referenzseiten vom selben Host stammen).
Jede dieser Methoden hat ihre eigenen Vor- und Nachteile, also nutzen Sie sie bitte gezielt. Diese Methoden sind nicht absolut sicher. Website-Administratoren müssen auch auf die Sicherheit einiger Systeme und die Sicherheit des ASP-Codes selbst achten. Andernfalls ist es immer noch möglich, dass jemand die Datenbank herunterlädt oder ändert.