Как создать триггер для замены введенных тегов sql <script>в SQL Server 2000? - PullRequest
1 голос
/ 08 декабря 2008

У меня есть несколько старых баз данных, которые мне передали, которые используют SQL Server 2000, и они получают SQL-инъекции с тегами сценариев JavaScript в конце некоторых полей базы данных. Мне нужен триггер, чтобы вырезать введенное обновление, пока у меня не будет времени, чтобы исправить интерфейс, который позволяет это.

Я новичок в SQL Server - пожалуйста, помогите!

Ответы [ 5 ]

2 голосов
/ 08 декабря 2008

Я думаю, что ограничение будет лучше. Все, что подвергло риску контент, было бы лучше отклонено.

Установите ограничение на поле что-то вроде

CHARINDEX('<script&gt',[fieldname]) = 0
0 голосов
/ 09 декабря 2008

как только ваши данные будут исправлены, вам нужно будет найти и исправить способ попадания инъекций в базу данных. Я предполагаю, что вы, вероятно, используете динамический SQl. Эта статья поможет вам исправить это, чтобы уколы не были проблемой http://www.sommarskog.se/dynamic_sql.html

0 голосов
/ 08 декабря 2008

Есть ли какие-либо регулярные выражения в SQL Server 2000? Содержимое тегов скрипта постоянно меняется.

0 голосов
/ 08 декабря 2008

Существует крупномасштабная атака, которая ведется с апреля прошлого года, и если это вас заинтересует, вам придется добавить триггер для каждой таблицы в базе данных. Этот скрипт изменяет исходный код атаки, чтобы очистить все одним махом, предполагая, что <script не является допустимым текстом где-либо в базе данных:

DECLARE @T varchar(255),@C varchar(255) 
DECLARE Table_Cursor CURSOR FOR select a.name,b.name from sysobjects a,syscolumns b where a.id=b.id and a.xtype='u' and (b.xtype=99 or b.xtype=35 or b.xtype=231 or b.xtype=167) 
OPEN Table_Cursor FETCH NEXT FROM Table_Cursor INTO @T,@C 
WHILE(@@FETCH_STATUS=0) BEGIN 
exec('update ['+@T+'] set ['+@C+']=LEFT(['+@C+'], CHARINDEX(''<script'', ['+@C+'])-1)
WHERE CHARINDEX(''<script'', ['+@C+']) >0')
FETCH NEXT FROM Table_Cursor INTO @T,@C 
END 
CLOSE Table_Cursor 
DEALLOCATE Table_Cursor

Кроме того, я слышал, что вам, возможно, удастся остановить атаку, удалив SELECT разрешений для пользователя приложения на syscolumns или sysobjects, если это вариант для вас. Вам все еще нужно исправить свои уязвимости при подготовке к следующей атаке.

0 голосов
/ 08 декабря 2008

что-то вроде:

ОБНОВЛЕНИЕ таблицы
SET field = REPLACE (поле, '', REPLACE (поле, '', ''))
WHERE table.pk IN (ВЫБЕРИТЕ pk ОТ вставленного WHERE поле LIKE '% script>')

...