Spec-Zone .ru
спецификации, руководства, описания, API

6.1.7. Клиент, Программирующий Направляющие линии Безопасности

Приложения, что MySQL доступа не должен доверять никаким данным, вводимым пользователями, которые могут попытаться обмануть Ваш код, входя особенный или вышли из символьных последовательностей в Веб-формах, URL, или безотносительно приложения, которое Вы создали. Убедитесь, что Ваше приложение остается безопасным, если пользователь вводит что-то как"; DROP DATABASE mysql;". Это - экстремальный пример, но большие утечки безопасности и потеря данных могли бы произойти в результате хакеров, использующих подобные методы, если Вы не готовитесь к ним.

Частая ошибка состоит в том, чтобы защитить только строковые значения данных. Не забудьте проверять числовые данные также. Если приложение генерирует запрос такой как SELECT * FROM table WHERE ID=234 когда пользователь вводит значение 234, пользователь может ввести значение 234 OR 1=1 заставить приложение генерировать запрос SELECT * FROM table WHERE ID=234 OR 1=1. В результате сервер получает каждую строку в таблице. Это представляет каждую строку и вызывает чрезмерную загрузку сервера. Самый простой способ защитить от этого типа атаки состоит в том, чтобы использовать единственные кавычки вокруг числовых констант: SELECT * FROM table WHERE ID='234'. Если пользователь вводит дополнительную информацию, все это становится частью строки. В числовом контексте MySQL автоматически преобразовывает эту строку в число и разделяет любые запаздывающие нечисловые символы от нее.

Иногда люди думают, что, если база данных содержит только публично доступные данные, она не должна быть защищена. Это является неправильным. Даже если допустимо вывести на экран какую-либо строку в базе данных, следует все еще защитить от атак "отказ в обслуживании" (например, те, которые основаны на методе в предыдущем абзаце, который заставляет сервер тратить впустую ресурсы). Иначе, Ваш сервер становится безразличным законным пользователям.

Контрольный список:

Много прикладных программных интерфейсов обеспечивают средство выхода из специальных символов в значениях данных. Должным образом используемый, это препятствует тому, чтобы пользователи приложения ввели значения, которые заставляют приложение генерировать операторы, которые имеют различный эффект, чем Вы предназначаете:

У других интерфейсов программирования могли бы быть подобные возможности.