Инъекция Malscript в базу данных SQL Server 2005 - PullRequest
2 голосов
/ 29 марта 2012

У меня есть база данных SQL Server 2005, размещенная в среде общего хостинга. К сожалению, последние пару месяцев у меня возникли проблемы с моим приложением из-за некоторых вредоносных скриптов и тегов HTML, добавленных к существующему тексту в моей базе данных.

Вставляемый текст выглядит почти как

"script src=http://somehostname/r.php ></script>"

Я использую IIS 7 и включил фильтрацию запросов. Но тем не менее атака поражает меня так сильно. Как я могу защитить мою базу данных от таких атак?

Заранее спасибо.

Ответы [ 3 ]

4 голосов
/ 29 марта 2012

Обычно это атака инъекцией sql.

Это состоит в том, чтобы добавить кавычки или SQL-код в действительные пользовательские вводы.

Вы уверены, что избежали всех вредоносных символов ваших данных, прежде чем использовать их в своих запросах?

Взгляните на http://en.wikipedia.org/wiki/SQL_injection

3 голосов
/ 29 марта 2012

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

Чтобы узнать больше, перейдите по следующей ссылке: Защита от SQL-инъекций в ASP.NET и Предотвращение атак SQL-инъекций

Тогда для Classic asp эта ссылка будет вам полезна: SQL-инъекция в Classic ASP и возможные решения

0 голосов
/ 29 марта 2012

Любое приложение, которое отправляет данные в вашу таблицу, должно исключить это как хорошую практику. Конечно, не все приложения делают.

Если вы не используете хранимые процедуры, я предлагаю вам создать триггер в таблице базы данных для INSERT и UPDATES и проверить, если какие-либо недопустимые строки пытаются ввести, если они делают, отклонить строку. В SQL есть некоторые ключевые слова для работы со строками, такие как CHARINDEX, я лично проверял бы на наличие общих символов, таких как '\', ';', '$', '&' и т. Д.

Я бы также попытался отфильтровать все, что уже вошло в ваши таблицы, и удалить строки:

DELETE FROM Table
WHERE Field LIKE '%<script>%'

В качестве альтернативы, если вы используете хранимую процедуру и передаете каждое поле в качестве параметра, эти символы не будут попадать в вашу базу данных.

CREATE TRIGGER [dbo].[tr_CheckSQLInjection] 
ON [dbo].[Notes]
FOR INSERT, UPDATE
AS

BEGIN


BEGIN TRANSACTION T_CHECKCHARACTERS

BEGIN TRY

 -- YOUR LOGIC TO STRIP OUT THE CHARACTERS HERE

  COMMIT TRANSACTION T_CHECKCHARACTERS

END TRY

BEGIN CATCH

    RAISERROR('UNABLE TO COMMIT THE TRANSACTION', 1, 1)

    ROLLBACK TRANSACTION T_CHECKCHARACTERS

END CATCH

END
...