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

Позвольте A быть суммой миллисекунд. Затем Вы имеете:

seconds=(A/1000)%60
minutes=(A/(1000*60))%60
hours=(A/(1000*60*60))%24

и так далее (% оператор модуля).

Hope это помогает.

5
задан johnny 11 August 2009 в 22:10
поделиться

5 ответов

Кто-то может внедрить SQL, чтобы проверка авторизации возвращала эквивалент истины вместо ложного, чтобы получить доступ к вещам, которые должны быть запрещены.

Или они могут внедрить соединение таблицу каталога самой себе 20 или 30 раз, чтобы повысить производительность базы данных для обхода.

Или они могут вызвать хранимую процедуру, которая запускается от имени другого пользователя базы данных, которая изменяет данные.

7
ответ дан 18 December 2019 в 07:10
поделиться
'); SELECT * FROM Users

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

7
ответ дан 18 December 2019 в 07:10
поделиться

Только если вы не возражаете против того, чтобы произвольные пользователи читали всю базу данных . Например, вот простая вводимая последовательность входа в систему:

select * from UserTable where userID = 'txtUserName.Text' and password = 'txtPassword.Text'

if(RowCount > 0) {
     // Logged in
}

Мне просто нужно войти в систему с любым именем пользователя и паролем 'или 1 = 1 , чтобы войти в систему как этот пользователь.

4
ответ дан 18 December 2019 в 07:10
поделиться

Будьте очень осторожны. Я предполагаю, что вы удалили выпадающую таблицу, изменили таблицу, создали таблицу и усекли таблицу, верно?

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

Вы когда-нибудь записывали на диск данные, полученные из базы данных? В этом случае они могут загрузить исполняемый файл, такой как perl, и файл perl, а затем выполнить их, чтобы получить лучший доступ к вашему ящику.

Вы также можете определить, что это за данные, используя ситуацию, когда ожидается конкретное возвращаемое значение. Т.е. если SQL возвращает истину, выполнение продолжается, если нет, выполнение останавливается. Затем вы можете использовать двоичный поиск в своем SQL. выберите count (*), где user_password> 'H'; Если счетчик> 0 продолжается. Теперь вы можете найти точный пароль в виде простого текста, не требуя его вывода на экран.

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

Jacob

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

Jacob

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

Jacob

3
ответ дан 18 December 2019 в 07:10
поделиться

Да, продолжайте беспокоиться о SQL-инъекции. Вредоносные операторы SQL предназначены не только для записи.

Также представьте, если бы существовали связанные серверы или если бы запрос был написан для доступа к ресурсам между базами данных. т.е.

SELECT * from someServer.somePayrollDB.dbo.EmployeeSalary;
0
ответ дан 18 December 2019 в 07:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: