Подтвердить что ты не робот

Существуют ли какие-либо различия между SQL Server и MySQL, когда дело доходит до предотвращения SQL-инъекций?

Я привык к разработке в PHP/MySQL и не имею опыта разработки с SQL Server. Я просмотрел документацию PHP MSSQL и похож на MySQLi в некоторых из методов, о которых я читал.

Например, с MySQL я использую функцию mysql_real_excape_string(). Есть ли аналогичная функция с PHP/SQL Server?

Какие шаги я должен предпринять, чтобы защитить от SQL-инъекции с помощью SQL Server?

Каковы различия между SQL Server и MySQL в отношении предотвращения SQL-инъекций?


также - этот пост точный? является ли символ escape-строки для SQL Server одной цитатой?

4b9b3361

Ответ 2

Используйте параметризованные запросы с ADODB или PDO. Эти библиотеки знают наилучшую функцию escape-функции для использования на основе базы данных, к которой она подключена. Они позволяют переключаться между mysql и ms-sql без внедрения уязвимостей.

SQL Injection для MySQL и MS-SQL радикально отличается.

SQL Injection для MS-SQL более значительно. Для этого вы можете складывать запросы:

select * from `table` where id='1' ; drop table `table`;-- '

Escaping полностью отличается, addlashses() делает не останавливать SQL-инъекцию под MS-SQL. Он использует систему двойных кавычек, так что это беглый запрос:

select * from table where test='trying to inject '' didn''t work!'

Хакер также может получить доступ к cmd.exe с помощью xp_cmdshell из SQL-запроса. Убедитесь, что эта привилегия была удалена!

В MySQL у вас не может стека, поэтому его общее использование union select (работает только при инъекции в select, в противном случае вы можете использовать подвыбор, но вы не можете складывать drop/update/delete/insert поверх выбора):

select somthing from table where 1 union select password from mysql.user

Сбрасывание выполняется с помощью обратных косых черт, функция addslashes() работает большую часть времени, но mysql_real_escape_string() намного лучше.

select * from table where test='trying to inject \' didn\'t work!'

Также вы хотите отключить file_priv, иначе хакер может отбросить бэкдор:

select test from table where name='jon' union select "<?php eval($_GET[e])?>" into outfile "/var/www/backdoor.php"-- '

Ответ 3

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

Ответ 4

это не тот инструмент, который позволяет атаковать SQL-инъекциями, это программист и то, как они его используют. и mysql, и sql-сервер позволяют вам вводить, если вы неправильно кодируете (слепо конкатенировать строки создать динамический sql), и оба обеспечивают привязку параметров, чтобы избежать этого.

Ответ 5

Нет, MSSQL не предоставляет такую ​​функцию, и в Mysqli вы также не должны использовать mysql_real_escape_string. В обоих случаях вы должны использовать Подготовленные заявления или Хранимые процедуры. Я считаю, что в документации по PHP дается достаточно подробное объяснение того, как использовать MSSQL apis.

Ответ 6

Параметризованные запросы - это путь. Драйвер sqlsrv поддерживает параметризованные запросы. Конечно, это будет полезно только вам, если вы используете PHP в Windows. На случай, если вы есть, здесь есть дополнительная информация (с примерами): Как и почему использовать параметризованные запросы.

Ответ 7

В MSSQL вы можете использовать хранимые процедуры для снижения риска внедрения sql. Хранимые процедуры будут принимать входные данные в разных типах, поэтому было бы трудно передать строку с помощью команд sql.

также проверьте http://msdn.microsoft.com/en-us/library/ms161953.aspx

Ответ 8

Любая база данных может подвергаться атакам SQL-инъекций. Один из способов избежать их - использовать хранимые процедуры. Оба MSSQL и MYSQL поддерживают хранимые процедуры.

Ответ 9

Сохраненные процедуры. Это. Запретить доступ к любой другой операции, кроме выполнения хранимых процедур. Таким образом, вы разрешаете только определенный набор запросов к вашей базе данных, тем самым исключая любую форму SQL Injection.

Оба поддерживают хранимые процедуры, НО, в MSSQL их легче отлаживать, потому что сообщения об ошибках намного яснее.