С Новым годом! Форум программистов, компьютерный форум, киберфорум
Microsoft SQL Server
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.81/16: Рейтинг темы: голосов - 16, средняя оценка - 4.81
0 / 0 / 0
Регистрация: 12.04.2011
Сообщений: 287

Правильное оформление запроса

17.08.2011, 22:56. Показов 3398. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет всем.
Интересует следующий вопрос :
как грамотно оформить запрос, чтобы не возможно было использовать SQL Injection ?

Имеется следующий код :
C#
1
2
var sql = ('SELECT adminName, adminPassword FROM tblAdmins WHERE (adminName=''+UserID+'') and (adminPassword=''+UserPWD+'')');
var rs = connAL.Execute(sql);
Значения UserID и UserPWD вводит пользователь и они посылаются из формы.

Эта запись не спасает от SQL Injection, потому как если написать в строке ввода ' or 'a' = 'a то все грузится (а не должно бы).

Помогите пожалуйста разобраться с этим.

Спасибо.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
17.08.2011, 22:56
Ответы с готовыми решениями:

Правильное оформление Dcount
Добрый день форумчане, подскажите пожалуйста, как правильно оформить текст в условии dcount. ...

Правильное построение запроса джойн
Плиз хелп ми! я разрабатываю приложение на C#, база данных access Есть таблица t1 и три классификатора t2 t3 t4 из таблицы t1...

Правильное оформление
Как правильно оформить данный слайдер, учитывая что там должно быть 12 блоков, из которых 4 показывают?(без скрипта) чтобы никто не...

12
0 / 0 / 0
Регистрация: 14.11.2010
Сообщений: 67
18.08.2011, 01:24
объект Command с параметрами спасет
0
0 / 0 / 0
Регистрация: 12.04.2011
Сообщений: 287
18.08.2011, 05:28  [ТС]
А можно подробнее : какие команды использовать и какие параметры ? И если можно с примерами - хотя бы на моей задаче.

Спасибо.

Можно еще дать ссылочки на эту тему.
0
86 / 62 / 69
Регистрация: 15.03.2007
Сообщений: 6,903
18.08.2011, 12:44
Изучи этот пример на VBScript.
Ключевые моменты:
- Вместо значения параметра в запрос подставляется вопросительный знак
- Значения параметров надо указывать в том же порядке в котором они идут в запросе
Данный пример верен только для текстовых запросов. При вызове хранимых процедур используются именованные параметры.
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
Const adCmdText = 1
Const adCmdStoredProc = 4
Const adVarChar = 200
Const adParamInput = 1
'
Dim objConn, objCmd, objRS, objParam, sqlQuery
'
sqlQuery = 'SELECT adminName, adminPassword FROM tblAdmins WHERE adminName=? AND adminPassword=?'
'
Set objConn = Server.CreateObject('ADODB.Connection')
objConn.ConnectionString = '...'
objConn.Open
'
Set objCmd = Server.CreateObject('ADODB.Command')
objCmd.CommandType = adCmdText
objCmd.CommandText = sqlQuery
Set objCmd.ActiveConnection = objConn
'
objCmd.Parameters(0) = UserID
objCmd.Parameters(1) = UserPWD
'
Set objRS = objCmd.Execute
If Not objRS.EOF Then
    Response.Write objRS('firm_ID')
End If
objRS.Close
0
0 / 0 / 0
Регистрация: 12.04.2011
Сообщений: 287
18.08.2011, 18:49  [ТС]
Привет.
Пример изучил. Переделал его под JS, но он не работает.
Вот что получилось :
JavaScript
1
2
3
4
5
6
7
8
9
10
11
adCmdText = 1;
adCmdStoredProc = 4;
adVarChar = 200;
adParamInput = 1;
var sql = ('SELECT adName, adPd FROM tblAd WHERE adName=? and adPd=?');
connC.CommandType = adCmdText;
connC.CommandText = sql;
connC.ActiveConnection = connAL;
connC.Parameters(0) = UserID;
connC.Parameters(1) = UserPWD;
var rs = connC.Execute;
где
JavaScript
1
2
3
4
var connAL = Server.CreateObject('ADODB.Connection');
connAL.Open(Application('DBConnStrAL'));
.....
var connC = Server.CreateObject('ADODB.Command');
Вылетает ошибка :
Технические сведения (для сотрудников службы поддержки)
Тип ошибки:
Microsoft JET Database Engine (0x80040E10)
Параметр ?_1 не имеет значения по умолчанию.
/www/scr/security.inc, line 43
Где line 43 - var rs = connC.Execute;

Что это обозначает ? Как я понимаю изначально параметры UserID и UserPWD - пустые, может из-за этого ошибка ?

И еще вопрос : зачем нужны
adCmdStoredProc = 4;
adVarChar = 200;
adParamInput = 1; ? Мы их нигде не используем, зачем они ?
0
0 / 0 / 0
Регистрация: 12.04.2011
Сообщений: 287
18.08.2011, 19:21  [ТС]
Все отбой.
Разобрался : нужно было поставить еще проверку на undefined - UserID, вот так вот :
Вместо
JavaScript
1
2
3
4
if(UserID ==0 || UserID==null || UserID=='')
 {
   ....
 }
написал
JavaScript
1
2
3
4
if(UserID ==0 || UserID==null || UserID=='' || UserID+''=='undefined')
 {
   ....
 }
Оно и понятно изначально UserID и UserPWD не определены, наверное поэтому и выскакивала ошибка.

Василий, только вот непонятно все таки зачем нужны :

adCmdStoredProc = 4;
adVarChar = 200;
adParamInput = 1; ?
0
0 / 0 / 0
Регистрация: 12.04.2011
Сообщений: 287
18.08.2011, 19:32  [ТС]
И еще такой вопрос :
как сделать таймаут по времени с Session или по-другому - хотя бы как на этом сайте (когда создаешь новую тему - вводишь имя и пароль, а по истечении некоторого времени - простоя - нужно опять вводить имя и пароль).

Thnx - Best regards to bazile
0
0 / 0 / 0
Регистрация: 12.04.2011
Сообщений: 287
22.08.2011, 02:39  [ТС]
Подскажите плиз кто-нибудь.
0
86 / 62 / 69
Регистрация: 15.03.2007
Сообщений: 6,903
22.08.2011, 11:48
> только вот непонятно все таки зачем нужны :
> adCmdStoredProc = 4;
> adVarChar = 200;
> adParamInput = 1; ?
Не нужны они. Забыл убрать их из примера.

> как сделать таймаут по времени с Session или по-другому -
> хотя бы как на этом сайте (когда создаешь новую тему - вводишь
> имя и пароль, а по истечении некоторого времени - простоя -
> нужно опять вводить имя и пароль).
Ты сам себе и ответил. Страница авторизации заносит в сессию признак прошел ли посетитель авторизацию. Когда сессия истечет потребуется снова вводить логин и пароль
0
0 / 0 / 0
Регистрация: 12.04.2011
Сообщений: 287
27.08.2011, 02:39  [ТС]
А где прописывается время ссессии ? Или как его задать ?
0
86 / 62 / 69
Регистрация: 15.03.2007
Сообщений: 6,903
28.08.2011, 10:41
В настройках IIS. Свойства сайта - закладка Home Directory - кнопка 'Configuration' - закладка 'Options'
0
0 / 0 / 0
Регистрация: 12.04.2011
Сообщений: 287
31.08.2011, 13:07  [ТС]
А програмно можно это как-то сделать ?
0
86 / 62 / 69
Регистрация: 15.03.2007
Сообщений: 6,903
31.08.2011, 13:10
Session.Timeout = КоличествоМинут
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
31.08.2011, 13:10
Помогаю со студенческими работами здесь

Правильное оформление проекта
Решил выучить Xamarin.Forms. Подскажите, как правильно оформлять проект. Знаю, что в C++ нужен для каждого класса отдельный хедер и cpp...

Правильное оформление кода
Возникло несколько вопросов по оформлению 1. Важны ли комментарии к коду? 2. Предположим, есть у меня три класса. Выполняют разную...

Правильное оформление конфига
Здравствуйте, есть сервер с apache2, на нём примерно 20 поддоменов, оформленных следующим образом: <VirtualHost *:80> ...

Правильное оформление друж-х ф-й
Добрый вечер! Компилятор ругается на то, что друж-я ф-ция использует private - поля класса. Попробовал положить определение в StdAfx.h, а...

Правильное оформление заголовка тегом H1
Ниже у меня распаложены 2 вида обрамления загаловка тегом H1, какой вид обрамления загаловка тегом H1 предпочтительнее использовать для...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Programma_Boinc 01.01.2026
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути Сочетание глобально распределённой вычислительной мощности и инновационных. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru