Мне нужно параметризоваться против внедрения SQL в Asp Classic, какие вещи я должен занять некоторое время, чтобы узнать, прежде чем я начну вносить изменения? - PullRequest
2 голосов
/ 28 апреля 2010

Исходя из PHP, я должен выполнить некоторую очистку sql в этом классическом веб-приложении asp из 1000 файлов без каких-либо предварительных знаний об asp, и прежде чем приступить к его взлому, я хотел бы знать о любых основных проблемах. во время кодирования в параметре asp classic / sql следить за подготовкой / внесением изменений в пробел asp. Какие хорошие быстрые обзорные ресурсы, и что я должен остерегаться?

Ответы [ 3 ]

3 голосов
/ 28 апреля 2010

Убедитесь, что вы не используете конкатенацию строк для добавления значений параметров в запрос SQL. Узнайте, как использовать объекты команд и параметров ADO. Всегда используйте заполнители в строке запроса SQL и добавляйте объекты Parameter в свою команду, чтобы указать значение для заполнителей.

1 голос
/ 28 апреля 2010
  1. Я бы создал функцию, которая инкапсулирует весь или большую часть доступа к данным. В предыдущих проектах я создал функцию GetRecordset, которая принимает оператор SQL и возвращает экземпляр набора записей. В функции я открываю базу данных, выполняю запрос, закрываю базу данных и возвращаю набор записей. Это обеспечивает закрытие соединений.

  2. Я хотел бы создать функцию для очистки параметров в операторе SQL или, что еще лучше, использовать параметризованные запросы. В коде, где я не хотел переписывать запросы и, таким образом, использовал конкатенацию, для функции, которую я использовал, требовался параметр vbVarType, чтобы я мог проверить, что переданное значение соответствует указанному типу, и чтобы даты помещались в формат, который не является специфическим для культуры сервера.

  3. Я бы искал экземпляры одинарной кавычки с последующей двойной кавычкой. Здесь вы ищете Select ... Where StringOrDateCol = '" & Request.QueryString("GodKnowsWhat") & ...

Даже со всем этим вы не поймаете все. Например, вы не поймали бы Select ...Where NumericCol = " & Request.QueryString("GodKnowsWhat"). Окончательный поиск может заключаться в поиске по Select, Update, Insert и Delete и проверке каждого оператора SQL, чтобы убедиться, что он использует функцию, созданную в # 2 выше.

1 голос
/ 28 апреля 2010

Согласовано ... Параметризованный запрос через заполнитель и, например, SqlDb.Command.Parameters.Add () очень помог бы ... Не просто полагайтесь на выборки, вы также можете делать инъекции с помощью вставки и удаления тоже.

...