Основные правила программирования ASP для начинающих 1. Распространенные ошибки новичков
Я видел распространенную базовую ошибку в коде многих сообщений на форуме - неправильный тип поля.
Программа и база данных тесно связаны между собой. Поля базы данных текстового типа или типа времени используют одинарные кавычки.
Например, следующий модифицированный оператор:
conn.execute update Counts устанавливает counts='&counts&' где num=&num& и Atime='&now()&'
Левая часть знака равенства — это имя поля, а правая часть знака равенства — это переданное имя переменной. Поле count имеет текстовый тип, поэтому до и после записи необходимо добавлять одинарные кавычки. будь то запись или запрос. В последующем операторе поиска поле num имеет числовой тип, поэтому до и после него нет одинарных кавычек. Поле Atime имеет тип времени, поэтому до и после него необходимы одинарные кавычки.
Самое важное — запрос по идентификатору. Поле идентификатора является уникальным и имеет числовой тип. Очевидно, что при запросе идентификационного номера не может быть одинарных кавычек.
conn.execute update Counts set counts='&counts&' где id='&id&' 'неправильный способ записи
conn.execute update Counts set counts='&counts&' где id=&id 'Правильный способ записи
2. Подключение к базе данных ACCESS
Обычно есть два способа подключения к базе данных. Новички в основном не знают, какой способ использовать или какой использовать при каких обстоятельствах, либо не знают принципов обоих.
① Прямое подключение к файлам базы данных.
Установите conn = Server.CreateObject(ADODB.Connection)
conn.Open DRIVER={Драйвер Microsoft Access (*.mdb)};
②Подключите файл базы данных через источник данных.
Установите conn = Server.CreateObject(ADODB.Connection)
conn.Open Provider=Microsoft.Jet.OLEDB.4.0 Источник данных=&Server.MapPath(база данных/yanhang.mdb)
Итак, какой из двух вариантов лучше? Конечно, второй, потому что первый заключается в том, что клиентский браузер фактически читает базу данных напрямую, поэтому безопасность сильно отличается. Второй подключается через источник данных. который основан на данных сервера. Исходный инструмент подключен и не имеет ничего общего с клиентом, поэтому база данных не будет доступна клиенту, а фактор безопасности намного выше.
Применение соответствующей программы базы данных ACCESS: ① Прямое подключение к файлу базы данных.
conn.Open DRIVER={Драйвер Microsoft Access (*.mdb)};
Для этого метода подключения к базе данных добавьте оператор:
set rs=server.createobject(adodb.recordset) '(правильное написание)
rs.open выберите * из dndj,conn,1,3
rs.addnew
rs(bh) = bh
rs(bm) = bm
rs(xm) = xm
rs(xsq) = xsq
RS.обновление
RS.закрыть
установить rs=ничего
set rs=server.createobject(adodb.recordset) '(неправильное написание)
sql=вставить в значения dndj(bh,bm,xm,xsq)('bh','bm','xm','xsq')
rs.open sql,conn,1,3
Применение соответствующей программы базы данных ACCESS: ② Подключение файлов базы данных через источники данных.
conn.Open Provider=Microsoft.Jet.OLEDB.4.0 Источник данных=&Server.MapPath(база данных/yanhang.mdb)
Для этого метода подключения к базе данных добавьте оператор:
conn.execute вставить в dndj(bh,bm,xm,xsq)values('&bh&','&bm&','&xm&','&xsq&') '(правильное написание)
set rs=server.createobject(adodb.recordset) '(неправильное написание)
sql=вставить в значения dndj(bh,bm,xm,xsq)('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)&>Super Connection</a> '(правильное написание)
response.write <a href='abc.asp?id=&rs(id)&'>Super Connection</a> '(правильное написание)
response.write <a href=abc.asp?id=&rs(id)&>Super Connection</a> '(правильное написание)
response.write <a href=abc.asp?id=<%=rs(id)%>>Супер соединение</a> '(неправильное написание)
response.write <a href=abc.asp?id=&rs(id)&>Super Connection</a> '(неправильное написание)
Форма компилируется в asp <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)& /> '(правильное написание)
response.write <input type=text name=id value=<%=rs(id)%> /> '(неправильное написание)
response.write <input type=text name=id value=&rs(id)& /> '(неправильное написание)
Основные правила программирования asp для новичков
4. Несколько способов предотвратить загрузку базы данных ACCESS
Многие динамические сайты широко используют базы данных, и база данных, естественно, стала основным файлом сайта. Если база данных загружена незаконно, весьма вероятно, что злоумышленники уничтожат веб-сайт. Или украсть информацию.
Представленные ниже методы применимы к пользователям, использующим пространство виртуального хоста, и пользователям с правами управления 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 для разрешения адресов пробелы будут кодироваться как %20, например http://bbs.bccn.net/date. /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. Поэтому, пока база данных загружена, ее безопасность остается неизвестной.
Второе: иметь контроль над хостом (конечно, здесь можно использовать настройки виртуального пространства).
5: База данных размещена вне WEB-каталога.
Если ваш WEB-каталог — e:/webroot, вы можете поместить базу данных в папку e:/data и перейти на страницу подключения к базе данных в e:/webroot.
Измените адрес подключения к базе данных на вид: ../data/#123 456.mdb, чтобы к базе данных можно было нормально обращаться, но ее нельзя было скачать, поскольку ее нет в WEB-каталоге! Этот метод в целом подходит для пользователей, приобретающих виртуальное пространство.
6: Используйте источник данных ODBC.
В программировании типа ASP по возможности следует стараться использовать источники данных ODBC и не писать имя базы данных в программе. В противном случае имя базы данных будет потеряно вместе с конфиденциальностью исходного кода ASP.
Например:
conn.open driver={Драйвер Microsoft Access (*.mdb)};dbq=&Server.MapPath(../123/abc/asfadf.mdb)
Видно, что каким бы странным ни было имя базы данных, какой бы глубокой ни была скрытая директория, после компрометации исходного кода ASP его можно легко скачать.
Если вы используете источник данных ODBC, такой проблемы не будет: имя conn.open ODBC-DSN, но это еще больше раздражает. Если каталог перемещается, источник данных необходимо сбросить!
7. Добавьте расширенное сопоставление имени базы данных, например MDB.
Этот метод достигается путем изменения настроек IIS. Он подходит для друзей, у которых есть контроль над IIS, но не подходит для пользователей, приобретающих виртуальные хосты (если администратор не настроил их). Я думаю, что этот метод является лучшим на данный момент. Всего одним изменением можно предотвратить загрузку всей базы данных сайта. Загрузки можно предотвратить, даже если целевой адрес открыт без изменения кода.
настраивать:
Добавьте анализ приложения файла .mdb в свойства IIS --- Домашний каталог --- Конфигурация --- Сопоставление --- Расширение приложения. Обратите внимание, что выбранная здесь DLL (или EXE и т. д.) не является произвольной. Если выбор неверен, файл MDB все равно можно загрузить. Обратите внимание, что лучше не выбирать asp.dll и т. д. Вы можете проверить это сами
После этой модификации загрузите базу данных, например: http://bbs.bccn.net/data/dvbbs6.mdb. Появится (ошибки типа 404 или 500)
8: Преимущества использования .net
Му Няо из Dongwang написал инструмент защиты от хотлинков WBAL, позволяющий предотвратить незаконную загрузку файлов. Я помню, что эксперт на этом форуме однажды опубликовал плагин для защиты от загрузки базы данных, который представляет собой .dll, загружаемый в IIS.
Однако он предотвращает только нелокальные загрузки и не имеет функции реального предотвращения загрузки базы данных. Но этот метод аналогичен 5-му способу
Вы можете изменить файл .NET, чтобы его нельзя было загрузить локально!
Среди этих методов только 7-й и 8-й методы могут быть изменены единообразно. После однократного изменения конфигурации можно запретить загрузку базы данных всего сайта. Остальные несколько методов требуют изменения имени базы данных и файла подключения соответственно. более хлопотно, но для друзей виртуального хоста это можно сделать только!
Фактически, 6-й метод должен быть расширением 5-го метода, которое может выполнять специальные функции. Однако для хостов, которые не поддерживают .net или боятся неприятных настроек, лучше использовать напрямую 5-й метод и второй. По умолчанию используется 6-й метод. Метод, вы все равно можете опубликовать, скопировав и подключившись к форуму или гостевой книге того же хоста, а затем нажмите, чтобы скачать (поскольку такие справочные страницы находятся с одного и того же хоста).
У каждого из этих методов есть свои плюсы и минусы, поэтому используйте их выборочно. Эти методы не являются абсолютно безопасными. Администраторам веб-сайтов также необходимо уделять внимание безопасности некоторых систем и безопасности самого написания кода ASP. В противном случае кто-то все равно может загрузить или изменить базу данных!