2010-03-03 1 views
0

Я делаю сайт в asp.ошибка базы данных в поиске

, когда я начать поиск с

имя как этот O'Neil

я получаю сообщение об ошибке базы данных.

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

Как удалить эту ошибку в asp.

если его в asp мы можем использовать добавочные полосы и stripslashes, но как я могу сделать это в asp ???

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

ответ

2

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

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

Поэтому

'O''Neil' 

это правильный способ "код" имя O'Neil, потому что если бы мы использовали

'O'Neil' 

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


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

Теперь, когда вы понимаете, что двойная одинарная цитата не будет удвоена, вы можете увидеть, как злонамеренные пользователи могут ее использовать, чтобы «обмануть» приложение.
Для примера скажем, пользователь как-то догадался, что таблица используется в 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 так авторизована, приведет к удалению всех строк из таблицы, и оставляя приложение сломано!

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

+0

Да, вы можете захотеть подробно рассказать о том, как избежать их, прежде чем они доберутся до дБ. – Russell

+0

Извините, я не правильно понял вас. его имя, которое пользователь сайта будет ввести для примера Д'Суза –

+0

может у меня этот запрос точно в осины это мой запрос Lstart = «O'neil»; выберите * из поиска, где lname нравится '% Lstart%' –