Остановите пользователя, вводящего 'char - PullRequest
2 голосов
/ 30 марта 2010

У меня есть страница поиска, на которой я бы хотел, чтобы пользователь не вводил 'в текстовые поля или заменял ее подходящим символом. Может кто-нибудь помочь мне достичь этого в asp.net VB?

Например, если пользователь ищет O'Reilly, поиск завершается с ошибкой:

Line 1: Incorrect syntax near 'Reilly'. Unclosed quotation mark before the character string ' '.

Спасибо!

Ответы [ 6 ]

7 голосов
/ 30 марта 2010

Используйте параметризованные операторы правильно, и это будет обработано для вас.

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

Ой-ой. Используйте параметризованные запросы .

1 голос
/ 30 марта 2010

Используйте событие javascript onKeyDown для текстового поля - если набранный символ является апострофом, вы можете просто удалить его, чтобы он не вводился. На стороне сервера вы должны просто заменить «» на «», просто чтобы убедиться.
Имейте в виду, что это очень небезопасное и нестабильное решение.

1 голос
/ 30 марта 2010

Вы можете избежать «персонажа с двумя из них», например,

sql += "Surname LIKE '%" & name.Replace("'", "''") & "%' AND "

и SQL примет это тогда.

Однако я бы предложил использовать параметры .

0 голосов
/ 30 марта 2010

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

http://msdn.microsoft.com/en-us/library/ms998271.aspx

(Как отметили несколько других, параметризованные операторы - это решение.)

0 голосов
/ 30 марта 2010

Чтобы действительно ответить на вопрос, вы можете поместить в текстовое поле событие javascript OnKeyDown, обнаружить нажатую клавишу и, возможно, отменить ввод:

<input class="mainSearchBox" type="text" id="searchTerm" onkeydown="DetectIllegalKeys();">

<script>
function DetectIllegalKeys() {
    if (event.keyCode == 222) {
        event.returnValue = false;
    }
}
</script>

чтобы вместо этого изменить апострофы на альтернативный символ:

<input class="mainSearchBox" type="text" id="searchTerm" onkeyup="ChangeSingleQuote();">

<script>
function ChangeSingleQuote() {
    var searchTerm = document.getElementById('searchTerm');
    searchTerm.value = searchTerm.value.replace(/'/g, "e"); 

}

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...