Выдели фрагмент текста с ошибкой или неточностью и нажми Ctrl+Enter!
Выдели фрагмент текста с ошибкой или неточностью и нажми Ctrl+Enter!
SQL-инъекция (SQL injection) — один из способов взлома сайтов, работающих с использованием SQL баз данных. Используется внедрение своего SQL-кода. Этот тип атак на сайты один из самых популярных в сети интернет. Последствий атаки с использованием инъекций могут быть непоправимы. Обычно атаки подобного рода направлены на то чтобы получить доступ к базе данных, учетным записям и так далее, но так же возникает огромная угроза полного уничтожения базы данных, что приведет его к нерабочему состоянию.
Преодоление последствий нападения инъекции SQL это одно, но предотвращение их это совершенно другое. Этот статья объясняет, каким образом мы можем обеспечить безопасность на сайте Joomla, с использованием Framework Joomla. Для получения дополнительной информации о инъекции SQL, обратитесь к CWE-89.
Для начала просто получим ссылку на глобальный объект Joomla отвечающий за базу данных сайта Joomla.
Существует два основных метода обращения к записям из таблицы MySQL:
Метод JDatabase::nameQuote() - используется для безопасного представления идентификаторов и имен. Для начала мы это продемонстрируем на простом примере с одним идентификатором:
Если вам необходимо несколько раз произвести эту операцию, например для идентификатора разделенного точкой (таблица.колонка), то нужно каждый из них пропустить через метод nameQuote(), примерно так:
Теперь разберем выборки с использованием слов как идентификаторов. В MySQL все строковые значения должны обрамляться одинарной либо двойной кавычкой. Вроде в этом нет никаких сложностей, до тех пор пока наша строка не будет содержать эти кавычки как часть себя. с помощью метода JDatabase::Quote() мы больше можем не обращать внимание на тексты подобного рода. Например:
Метод JDatabase::Quote() просто с учетом текущего типа базы данных экранирует нежелательные символы в итоге из строки
получаем следующее
Текст окружен кавычками и все спец символы экранированы.
Обратиться к записи можно не только по словам, но и числам как целым так и с плавающей запятой. Для проверки обычно используется функции int, intval, (float), floatval. Использование в примере ниже.
В большинстве случаев данные на сайт передаются через POST или GET методы. Для проверки этих переменных удобно пользоваться специальным классом JRequest. Простой пример использования JRequest:
Есть более сложный способ фильтрации данных - через класс JFilterInput. Используется он по тому же принципу, что и JRequest.
Какие либо данные, например числа можно взять в кавычки с помощью метода Quote базы данных:
В MySQL существует всего 6 различных типов, которые могут храниться как строка:
Давайте рассмотрим, как безопасно можно работать с этими типами данных MySQL.
NULL
NULL - это полное отсутствие всяких данных. Например пустая строка это не NULL. Это значение всегда должно быть записано в виде NULL либо \N.
Шестнадцатеричное число (Hexadecimal)
Для Joomla использовать шестнадцатеричные числа - это большая редкость. Поэтому в её функционале не предусмотрен такой тип данных. Но если у вас все таки возникла такая необходимость, то для проверки воспользуйтесь следующим кодом:
Булевы значения (Boolean)
Проверка булевых типов очень проста. Если что-то пришло, то TRUE, в противном случае - FALSE:
Bit Field
Двоичные значения также редкость в расширениях Joomla. Опять же специальных готовых методов для этого не предусмотрено, поэтому воспользуемся следующим способом:
Если у вас есть возможность не использовать особенные типы данных, то лучше не подвергать себя угрозе и пользоваться обычными значениями.
This post will help the internet visitors for setting up new
web site or even a weblog from start to end.
That is really attention-grabbing, You are a very skilled blogger.
I have joined your rss feed and stay up for seeking extra
of your magnificent post. Additionally, I've shared your website in my social
networks
Hi there! This is my first visit to your blog! We are a team of volunteers and starting a new project
in a community in the same niche. Your blog provided
us valuable information to work on. You have done a wonderful job!
If some one desires expert view regarding blogging after that i propose
him/her to go to see this blog, Keep up the pleasant job.
You can definitely see your enthusiasm within the article you
write. The world hopes for even more passionate writers like you who are not afraid to say how
they believe. At all times go after your heart.
When some one searches for his essential thing, so he/she desires to be available that in detail, therefore that thing is maintained over
here.
I blog frequently and I really thank you for your content.
This article has truly peaked my interest.
I am going to book mark your site and keep checking for new details about once a week.
I opted in for your RSS feed as well.
Your method of explaining everything in this paragraph is actually good, every one be
capable of without difficulty understand it, Thanks a lot.
You are so cool! I don't think I've read anything like that before.
So good to find somebody with some original thoughts on this subject.
Really.. many thanks for starting this up. This website is one thing that is required
on the internet, someone with a little originality!
It's amazing to pay a visit this website and reading the views of all mates about this article,
while I am also zealous of getting experience.