Кодек Sybase для OSWAP ESAPI

Я использую базу данных sybase.

Если я хочу использовать OWASP ESAPI для предотвращения SQL-инъекций

Какой кодек мне следует использовать?

ОраклКодек? Кодек MySQL? Кодек DB2? https://static.javadoc.io/org.owasp.esapi/esapi/2.0.1/org/owasp/esapi/codecs/package-summary.html

Благодарю вас!


person Ted Yu    schedule 20.03.2018    source источник
comment
ESAPI 2.0.1 сильно устарел и содержит недостатки безопасности.   -  person avgvstvs    schedule 20.03.2018


Ответы (1)


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

Вот выдержка из документации по OracleCodec:

/**
 * Implementation of the Codec interface for Oracle strings. This function will only protect you from SQLi in the case of user data
 * bring placed within an Oracle quoted string such as:
 * 
 * select * from table where user_name='  USERDATA    ';

Не обращайте внимания на следующие слова из руководства по Sybase:

Не подготавливайте операторы, которые используются только один раз

Используйте подготовленные операторы или хранимые процедуры для всех транзакций базы данных. За почти десятилетие разработки я ни разу не видел реальной потери производительности из-за использования подготовленных операторов. В большинстве языков производительность улучшается. Это, безусловно, относится к Java.

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

[2019 EDIT] Приведенный ниже код технически может быть самим SQLi, когда я писал это, я хотел указать, что параметр dbName безопасно использовать таким образом только когда сервер полностью контролирует значение.[/2019]

String updateString =
    "update " + dbName + ".COFFEES " +
    "set SALES = ? where COF_NAME = ?";
updateSales = con.prepareStatement(updateString);

Вот еще.

В настоящее время ESAPI не предоставляет кодек Sybase, и в настоящее время нет планов по его разработке.

Источник: В настоящее время я являюсь соруководителем проекта ESAPI.

person avgvstvs    schedule 20.03.2018
comment
Я поддерживаю какой-то огромный и старый код. Которые используют метод объединения строк с помощью сложного оператора for и if для выполнения sql. Он уязвим для SQL-инъекций. Я не хочу переписывать их подготовленным оператором. Я думаю, что OSWAP ESAPI — это самый простой способ защитить SQL-инъекцию. Просто оберните переменные с помощью escape-функции. И не нарушайте исходную логику. Поэтому это может свести к минимуму побочный эффект. К сожалению, нет поддержки кодеков sybase. Поэтому, если я использую кодек oracle, mysql или db2. Что случится? Большое спасибо за ответ! - person Ted Yu; 21.03.2018
comment
И он будет по-прежнему уязвим для SQL-инъекций даже после ESAPI, потому что они предназначены только для экстренного использования, обычно ЕДИНСТВЕННОЕ, что мы избегаем в этих кодеках, — это одинарные кавычки, и это блокирует только ОДИН тип SQLi. Мы намеренно оставляем их сломанными, потому что правильное решение — «Подготовленные заявления». Вы были предупреждены. - person avgvstvs; 21.03.2018
comment
Единственный другой вариант — написать грамматику BNF для синтаксиса Sybase и использовать такой инструмент, как yacc или Javacc, для создания собственного синтаксического анализатора. Этот вариант требует гораздо большего тестирования, поэтому OWASP рекомендует «Подготовленные отчеты». Все эти тесты сделаны для вас. - person avgvstvs; 21.03.2018
comment
И большинство языков, особенно SQL, содержат краеугольные случаи синтаксического анализа, зависящие от поставщика. BNF может нарушить допустимый синтаксис. - person avgvstvs; 21.03.2018
comment
Если бы вам просто нужна была эта голая кость защиты, вы МОГЛИ бы сделать то, что вы предлагаете, но я бы НИКОГДА не рекомендовал это какой-либо группе приложений, которую я поддерживаю. Если проблема заключается в деньгах, объясните это заинтересованным сторонам и попросите их письменно подтвердить риски. Вы же не хотите, чтобы вас уволили, если приложение взломают. - person avgvstvs; 21.03.2018
comment
Если проблема в том, что вы не хотите возиться с работой, спросите себя, что вы предпочитаете: писать готовые заявления или искать новую работу, потому что приложение взломали? - person avgvstvs; 21.03.2018
comment
Хорошо, большое спасибо ! - person Ted Yu; 21.03.2018
comment
Вот полное руководство OWASP по предотвращению SQLi: owasp.org/index.php/SQL_Injection_Prevention_Cheat_Sheet - person avgvstvs; 21.03.2018
comment
Если вы действительно не можете переписать запросы в хранимые процедуры, проанализируйте все входные данные и внесите в белый список только разрешенные символы. Это не так безопасно, но это лучше, чем экранирование данных. - person avgvstvs; 21.03.2018
comment
Особенно загляните в раздел о шестнадцатеричном кодировании. - person avgvstvs; 21.03.2018
comment
Благодарю вас! Вы так добры! - person Ted Yu; 23.03.2018
comment
Если вы не можете использовать подготовленные операторы для таких значений, как dbName в приведенном выше примере, будет ли это подходящим местом для ESAPI encodeForSQL? Согласен, что белый список лучше, но иногда допустимые значения неизвестны. - person Matt H; 11.01.2019
comment
@MattH Вы косвенно указали, что я немного испортил этот пример. Проблема заключается в проприетарном характере РСУБД и в том, что грамматики БНФ обычно не публикуются, и невозможно получить лучшую защиту, чем с помощью подготовленного оператора. Поэтому я не могу рекомендовать нашу библиотеку как нечто большее, чем временное решение. Однако если бы у вас был доступ к BNF, вы могли бы использовать такие инструменты, как javacc, flex или bison, для создания синтаксического анализатора. - person avgvstvs; 12.01.2019