ошибка базы данных при поиске - PullRequest
0 голосов
/ 03 марта 2010

Я делаю сайт в ASP.

когда я начинаю поиск с

имя, подобное этому o'neil

Я получаю ошибку базы данных.

Я получаю эту ошибку из-за этого 'в этом имени.

как я могу удалить эту ошибку в asp.

Если это в asp, мы можем использовать addlashes и stripslashes, но как мне это сделать в asp ???

Пожалуйста, помогите

1 Ответ

2 голосов
/ 03 марта 2010

Является ли это для выбора конкретного строкового значения или для вставки его в базу данных, строка должна быть допустимой для SQL, в частности:

  • Начало строки обозначается одинарной кавычкой
  • Любая одинарная кавычка, являющаяся частью строки, должна быть удвоена (чтобы SQL не понимал ее как конец строки)
  • Конец строки помечен одинарной кавычкой.

1011 * Поэтому *

  'O''Neil'

- это правильный способ «кодировать» имя О'Нила, потому что, если мы использовали

  'O'Neil'

вместо этого SQL будет видеть это как строку, начинающуюся с буквы O, но заканчивающуюся там после. За этой однобуквенной строкой следует выражение Neil', которое SQL не может понять.


Приведенная выше информация позволит вам хранить имена и запрашивать их таким образом, чтобы сохранить одинарные кавычки, встроенные в имена, как в случае с ирландским O'xxxx.
Помимо помощи в исправлении этой ситуации, было бы упущением, если бы я забыл упомянуть о рисках SQL-инъекций .

Теперь, когда вы понимаете, что не удвоенная одинарная кавычка завершит строку, вы можете увидеть, как злоумышленники могут использовать это для «обмана» приложения.
Например, предположим, что пользователь как-то догадался, что используемая таблица - search, он может продолжить и заполнить следующую строку в окне редактирования приложения

.
  O'; DELETE FROM search where 'a%'='a

Ваша логика будет использовать эту строку следующим образом

Lstart="O'; DELETE FROM search where 'a%'='a"; select * from search where lname like '%Lstart%'
-- which effectively will be substituted as
select * from search where lname like '%O';  DELETE FROM search where 'a%'='a%'

Что, если учетная запись, связанная с базовым соединением SQL, авторизована таким образом, приведет к удалению всех строк из таблицы и повреждению вашего приложения!

Систематически удваивая одинарные кавычки и используя несколько других мер предосторожности, таких как использование параметризованных запросов, можно защитить приложение (и его базу данных) от атак этого типа.

...