Архив рубрики: Публикации

💉 Что такое SQL-инъекция и как ее предотвратить в PHP-приложениях

Если вы уже знаете, что такое SQL-инъекция, смело переходите ко второй половине статьи.

Но для тех, кто только начинает заниматься веб-разработкой и мечтает взять на себя более высокие должности, кое-что нужно почитать.

Что такое SQL-инъекция?

Ключ к пониманию SQL-инъекций находится в его названии: SQL + Injection.

Слово «инъекция» здесь не имеет каких-либо медицинских коннотаций, а скорее является использованием глагола «внедрить».

Вместе эти два слова воплощают идею внедрения SQL в веб-приложение.

Ввод SQL в веб-приложение. , , ммм , , Разве это не то, что мы делаем в любом случае?

Да, но мы не хотим, чтобы злоумышленник управлял нашей базой данных.

Давайте разберемся с этим на примере.

Допустим, вы создаете типичный веб-сайт PHP для местного магазина электронной коммерции, поэтому вы решили добавить контактную форму, например:

<form action="record_message.php" method="POST">

  <label>Your name</label>

  <input type="text" name="name">



  <label>Your message</label>

  <textarea name="message" rows="5"></textarea>



  <input type="submit" value="Send">

</form>

И давайте предположим, что файл send_message.php хранит все в базе данных, чтобы владельцы магазина могли читать пользовательские сообщения.

Например такой код:

<?php



$name = $_POST['name'];

$message = $_POST['message'];



// check if this user already has a message

mysqli_query($conn, "SELECT * from messages where name = $name");



// Other code here

Итак, вы сначала пытаетесь увидеть, есть ли у этого пользователя непрочитанное сообщение. Запрос SELECT * from messages where name = $name, кажется достаточно простым, верно?

НЕПРАВИЛЬНО!

Теперь мы открыли двери для мгновенного уничтожения нашей базы данных.

Для этого злоумышленнику необходимо выполнить следующие условия:

  • Приложение работает на базе данных SQL (сегодня почти каждое приложение работает на SQL)
  • Текущее подключение к базе данных имеет разрешения «редактировать» и «удалять» в базе данных.
  • Названия важных таблиц можно угадать

Третий момент означает, что теперь, когда злоумышленник знает, что вы управляете магазином электронной коммерции, вы, скорее всего, сохраните данные заказа в таблице orders.

Вооружившись всем этим, все, что нужно сделать злоумышленнику, это указать имя:

Joe; truncate orders;

Давайте посмотрим, каким будет запрос, когда он будет выполнен скриптом PHP:

SELECT * FROM messages WHERE name = Joe; truncate orders;

Хорошо, в первой части запроса есть синтаксическая ошибка (без кавычек вокруг «Joe»), но точка с запятой вынуждает движок MySQL начать интерпретацию нового: truncate orders.

Просто так, одним махом, вся история заказов исчезла!

Теперь, когда вы знаете, как работает SQL-инъекция, пришло время посмотреть, как это остановить. Для успешного внедрения SQL необходимо выполнить два условия:

  1. Скрипт PHP должен иметь права на изменение / удаление базы данных. Я думаю, что это верно для всех приложений, и вы не сможете сделать ваши приложения доступными только для чтения. И подумайте, что, даже если мы удалим все привилегии на изменение, SQL-инъекция все еще может позволить кому-то запускать запросы SELECT и просматривать всю базу данных, включая конфиденциальные данные. Другими словами, снижение уровня доступа к базе данных не работает, ведь ваше приложение все равно нуждается в этом.
  2. Пользовательский ввод обрабатывается. Единственный способ внедрения SQL-кода – это когда вы принимаете данные от пользователей. Еще раз, не практично останавливать все входные данные для вашего приложения только потому, что вы беспокоитесь о внедрении SQL.

Предотвращение внедрения SQL инъекуции в PHP

Теперь, учитывая, что соединения с базой данных, запросы и пользовательские вводы являются частью жизни БД, то как мы можем предотвратить внедрение SQL?

К счастью, это довольно просто, и есть два способа сделать это:

1) очистить пользовательский ввод и 2) использовать подготовленные операторы.

Пользовательский ввод

Если вы используете более старую версию PHP (5.5 или ниже, и это часто случается на виртуальном хостинге), было бы целесообразно выполнить весь пользовательский ввод с помощью функции mysql_real_escape_string ().

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

Например, если у вас есть строка, похожая на строку «I’m a strin», злоумышленник может использовать символ одинарной кавычки (‘) для манипулирования создаваемым запросом к базе данных и вызывать SQL-инъекцию.

Запуск его через mysql_real_escape_string () приводит к появлению строки, которая добавляет обратную косую черту к одиночной кавычке, избегая ее.

В результате вся строка теперь передается в базу данных как безвредная строка вместо возможности участвовать в манипулировании запросами.

У этого подхода есть один недостаток: это действительно очень старая техника, которая согласуется со старыми формами доступа к базе данных в PHP.

Начиная с PHP 7, этой функции больше не существует, что подводит нас к следующему решению.

Используйте готовые операторы

Подготовленные операторы – это способ сделать запросы к базе данных более безопасными и надежными.

Идея состоит в том, что вместо отправки необработанного запроса в базу данных мы сначала сообщаем базе данных структуру запроса, который мы будем отправлять.

Это то, что мы подразумеваем под «подготовкой».

Как только оператор подготовлен, мы передаем информацию как параметризованные входные данные, чтобы база данных могла «заполнить пробелы», подключив входные данные к структуре запросов, которую мы отправляли ранее.

Это отнимает любую особую мощность, которую могут иметь входные данные, в результате чего они будут рассматриваться как простые переменные (или полезные нагрузки, если хотите) во всем процессе.

Вот как выглядят подготовленные операторы:

<?php

$servername = "localhost";

$username = "username";

$password = "password";

$dbname = "myDB";



// Create connection

$conn = new mysqli($servername, $username, $password, $dbname);



// Check connection

if ($conn->connect_error) {

    die("Connection failed: " . $conn->connect_error);

}



// prepare and bind

$stmt = $conn->prepare("INSERT INTO MyGuests (firstname, lastname, email) VALUES (?, ?, ?)");

$stmt->bind_param("sss", $firstname, $lastname, $email);



// set parameters and execute

$firstname = "John";

$lastname = "Doe";

$email = "john@example.com";

$stmt->execute();



$firstname = "Mary";

$lastname = "Moe";

$email = "mary@example.com";

$stmt->execute();



$firstname = "Julie";

$lastname = "Dooley";

$email = "julie@example.com";

$stmt->execute();



echo "New records created successfully";



$stmt->close();

$conn->close();

?>

Я знаю, что этот процесс кажется излишне сложным, если вы новичок в подготовленных операторах, но концепция стоит затраченных усилий.

Для тех, кто уже знаком с расширением PDO PHP и использует его для создания готовых операторов, у меня есть небольшой совет.

Предупреждение: будьте осторожны при настройке PDO

Используя PDO для доступа к базе данных, мы можем впасть в ложное чувство безопасности. «Ах, хорошо, я использую PDO. Теперь мне не нужно думать ни о чем другом », – таково наше мышление.

Это правда, что PDO (или подготовленные MySQLi операторы) достаточно для предотвращения всевозможных SQL-атак, но вы должны быть осторожны при его настройке.

Обычно просто скопируйте и вставьте код из учебников или из ваших предыдущих проектов и двигайтесь дальше, но этот параметр может отменить все:

$dbConnection->setAttribute(PDO::ATTR_EMULATE_PREPARES, true);

Решение простое: убедитесь, что для этой эмуляции установлено значение false.

$dbConnection->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);

Теперь PHP-скрипт вынужден использовать подготовленные операторы на уровне базы данных, предотвращая всевозможные SQL-инъекции.

Предотвращение SQLi с использованием WAF

Знаете ли вы, что вы также можете защитить веб-приложения от внедрения SQL с помощью WAF (брандмауэр веб-приложений)?

И не только SQL-инъекция, но и многие другие уязвимости уровня 7, такие как межсайтовый скриптинг, неправильная аутентификация, межсайтовая подделка, раскрытие данных и т. д.

Вы можете использовать самодостаточный хостинг, такой как Mod Security, или облачный, как показано ниже.

Заключение

SQL-инъекция – очень неприятная атака на веб-приложение, но ее легко избежать.

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

Тем не менее, мы не всегда работаем над безопасностью веб-фреймворка, поэтому лучше знать об этом типе атаки и не поддаваться ей.

Статьи по теме:

 



2019-06-03T11:42:45
Закрытие уязвимостей

Можно ли сбросить пароля администратора Windows?

Если вы забыли пароль администратора в Windows, у вас не будет большого контроля. Отсутствие доступа к учетной записи администратора означает, что вы не можете удалять программное обеспечение, вносить изменения в систему и выполнять другие административные задачи на своем компьютере.

Но не отчаивайтесь — мы здесь, чтобы помочь вам. Мы объясним ситуацию с учетной записью администратора Windows по умолчанию в различных версиях Windows и покажем, как сбросить пароль администратора.

История учетной записи администратора Windows

Ваше первое действие, когда вы забудете пароль своей учетной записи, может заключаться в поиске пароля администратора Windows по умолчанию. Однако в Windows Vista и более поздних версиях по умолчанию нет доступной общесистемной учетной записи администратора. Это мера безопасности для защиты вашего компьютера.

В Windows XP была дополнительная учетная запись администратора, которая сидела рядом с вашими обычными учетными записями. Проблема заключалась в том, что большинство людей оставляли пароль для этой учетной записи пустым, что означало, что любой пользователь, имеющий доступ к компьютеру и немного знаний, мог войти в систему с полными правами администратора.

Это было еще более серьезной проблемой, если вы все время использовали учетную запись администратора, так как любая вредоносная программа могла свободно делать все, что хотела.

Современные учетные записи администраторов

Начиная с Windows Vista, Microsoft по умолчанию отключила встроенную учетную запись администратора. Вместо этого он включал функцию контроля учетных записей, которая до сих пор существует в Windows 10. Это позволяет вам временно предоставлять права администратора при использовании любой учетной записи, если у вас есть пароль администратора.

Таким образом, нет пароля администратора Windows по умолчанию, который вы можете найти для любых современных версий Windows. Хотя вы можете включить встроенную учетную запись администратора раз, мы рекомендуем вам избегать этого. Эта учетная запись работает с правами администратора все время и никогда не запрашивает подтверждения для чувствительных действий. Это повышает риск безопасности, когда вредоносное ПО может выполняться легче.

Кроме того, вам необходимы права администратора для включения учетной записи администратора по умолчанию, а это означает, что это не решение, если вы забыли свой пароль администратора. Вместо этого давайте посмотрим, как сбросить пароль администратора в Windows 10, 8 и 7.

Забыли пароль администратора в Windows 10

Если вы забыли пароль администратора Windows 10, вы не сможете установить любое программное обеспечение. Иногда вы даже не сможете использовать свой компьютер. Microsoft не облегчает сброс пароля, но у вас есть несколько вариантов. В этом уроке мы покажем вам 6 простых способов восстановить забытый пароль Windows 10 для администратора и учетной записи Microsoft. Будьте уверены, по крайней мере один способ поможет вам.

Метод 1: использовать диск сброса пароля

Использование диска для сброса пароля является официальным методом Microsoft для сброса утерянного пароля Windows. Единственным недостатком этого метода является то, что вам нужно создать диск сброса пароля Windows 10, прежде чем ваш пароль будет утерян.

Если вы создали диск для сброса пароля, вы можете легко установить новый пароль для входа на компьютер с Windows 10.

Способ 2: войти с другим параметром входа

Если вы по-прежнему можете войти в Windows 10 с помощью PIN-кода, пароля к изображению или другой учетной записи администратора, есть большая вероятность, что вы сможете открыть командную строку с повышенными правами и легко сбросить пароль Windows 10.

Просто нажмите клавишу с логотипом Windows + X на клавиатуре, чтобы открыть меню быстрого доступа, и нажмите « Командная строка» («Администратор»). Чтобы сбросить забытый пароль, введите следующую команду и нажмите Enter. Замените account_name и new_password своим именем пользователя и желаемым паролем соответственно.

net user account_name new_password

Способ 3: сбросить пароль учетной записи Microsoft онлайн

Начиная с Windows 8, большинство людей теперь используют учетную запись Microsoft для входа в Windows. Если вы забыли пароль своей учетной записи Microsoft, просто используйте другой компьютер, чтобы посетить страницу сброса пароля Windows Live на веб-сайте Microsoft, и вы можете сбросить пароль в Интернете. Это относительно проще, чем сбросить пароль локальной учетной записи.

Этот метод требует, чтобы у вас был доступ к альтернативной учетной записи электронной почты или номеру телефона, который вы указали при регистрации учетной записи Microsoft. Если у вас больше нет к ним доступа, Microsoft не сможет подтвердить вашу личность. В этом случае вы можете преобразовать учетную запись Microsoft Windows 10 в локальную учетную запись с загрузочного носителя, чтобы вы могли снова войти в Windows 10 без потери файлов.

Способ 4: сброс пароля Windows 10 с помощью MSDaRT

MSDaRT (Microsoft Diagnostics and Recovery Toolset) — это набор инструментов от Microsoft, который помогает ИТ-специалистам восстанавливать компьютеры, которые стали непригодными для использования. Загрузите компьютер с компакт-диска DaRT Recovery, а затем запустите встроенный инструмент Locksmith Wizard, который позволяет сбросить пароль Windows 10 для любой локальной учетной записи.

К сожалению, DaRT не является бесплатным. Этот инструмент доступен только для корпоративных клиентов Microsoft, подписчиков TechNet Plus и подписчиков MSDN. Перед выполнением сброса пароля в Windows 10 ознакомьтесь с этим видеоуроком на веб-сайте Microsoft: сброс паролей с помощью DaRT.

Способ 5: сброс пароля Windows 10 с помощью PCUnlocker

PCUnlocker позволяет разблокировать любой компьютер под управлением Windows, заблокированный забытым паролем. Это загрузочный образ, который можно записать на CD или USB-накопитель с помощью бесплатного ISO2Disc. После загрузки с PCUnlocker Live CD (или USB) вы можете просмотреть все локальные учетные записи для установки Windows 10.

Просто выберите одну из ваших локальных учетных записей и нажмите кнопку «Сброс пароля», программа проверит состояние выбранной учетной записи и выполнит следующие задачи, чтобы решить проблему с паролем:

  1. Удалит пароль, если ваша учетная запись Windows защищена паролем
  2. Переключит связанную учетную запись Microsoft на локальную учетную запись
  3. Повысит выбранного вами стандартного/ограниченного пользователя до администратора
  4. Активирует аккаунт, если он отключен
  5. Разблокирует заблокированный аккаунт
  6. И многое другое…

После того, как вы сбросили пароль Windows 10 и вернулись в свою систему, убедитесь, что вы установили новый пароль, который не забудете в следующий раз. Рекомендуется также создать диск для сброса пароля в Windows 10, если вы используете достаточно сложный пароль из соображений безопасности.

Способ 6: восстановить Windows 10 до предыдущего состояния

Если вы не хотите использовать какое-либо программное обеспечение для сброса пароля Windows 10 или ваш жесткий диск зашифрован с помощью BitLocker, вы можете восстановить свой компьютер до самой последней точки восстановления, содержащей старый пароль, который вы помните. Однако программы, которые были установлены после точки восстановления, должны быть установлены снова.



2019-06-03T10:42:02
Вопросы читателей

Роутер Netis WF2409E: настраиваем без вызова специалиста

Роутеры Netis не так популярны, как те же модели от TP-Link. Тем не менее их качество тоже заслуживает внимания. Одна из бюджетных и функциональных моделей — Netis WF2409E. В чём её особенности? Как её самостоятельно настроить без помощи специалиста провайдера?

Читать

Решение проблем с интернетом Yota: что делать, если он медленно работает или не работает совсем

Беспроводной интернет — это довольно удобное решение, а иногда и единственное из возможных. Компания Yota предоставляет беспроводной интернет по всей России на довольно выгодных условиях. Но если вы подключите его, важно знать, из-за чего могут возникнуть проблемы со скоростью или стабильностью связи и как их решить.

Читать

Забыл пароль от Wi-Fi на GoPro, как сбросить?

GoPro — популярная карманная камера с невероятными функциями. GoPro использует приложение GoPro для синхронизации видеороликов GoPro между камерой и внешними устройствами, такими как ноутбук, смартфоны и т.д. Чтобы поделиться своей историей, снятой камерой GoPro, в социальных сетях, вам нужно сначала подготовить кучу видеороликов GoPro. Видеозаписи GoPro должны быть отредактированы, а затем преобразованы в потрясающее видео или изображение, прежде чем они будут опубликованы в социальных сетях. Чтобы создать полную работу из ваших видеороликов, вам необходимо сначала передать файлы с камеры GoPro на внешние устройства, такие как смартфоны или настольный компьютер, через GoPro Wi-Fi на камерах GoPro с поддержкой Wi-Fi.

GoPro создает собственную точку доступа Wi-Fi, которую можно использовать для подключения камеры к внешним устройствам, таким как мобильные устройства и ноутбуки, для импорта файлов и предварительного просмотра потокового вещания через внешние устройства. При подключении ваших устройств из приложения GoPro к сети Wi-Fi GoPro вы можете проверять предварительный просмотр и передавать файлы непосредственно с камеры на мобильное устройство. Чтобы начать процесс, сначала необходимо подключить камеру GoPro к таким устройствам, как смартфоны или ноутбуки.

Сброс пароля GoPro Wi-Fi довольно прост. Инструкции различаются в зависимости от модели вашей камеры. В этой статье мы кратко излагаем процедуры сброса пароля GoPro Wi-Fi в зависимости от модели камеры.

  1. Сброс пароля Wi-Fi на GoPro HERO7 Black, Silver & White
  2. Сброс пароля Wi-Fi на GoPro HERO6 Black / HERO5 Black / HERO (2018)
  3. Сброс пароля Wi-Fi в сеансе GoPro HERO5
  4. Сброс пароля Wi-Fi на GoPro HERO4 Silver & Black
  5. Сброс пароля Wi-Fi в сеансе GoPro HERO / HERO4

Wi-Fi GoPro имеет пароль по умолчанию, и вы можете изменить пароль Wi-Fi в целях безопасности вскоре после регистрации. Однако могут быть случаи, когда вы не помните пароль Wi-Fi и это ухудшает ситуацию, когда ваш логин Wi-Fi на GoPro больше не сохраняется на устройствах. Система Wi-Fi, являющаяся важной частью камеры для сопряжения камеры с внешними устройствами для передачи файлов, единственный способ решить эту проблему — сбросить пароль Wi-Fi на камере GoPro.

1] Сброс пароля Wi-Fi на GoPro HERO7

Сброс пароля GoPro Wi-Fi довольно прост. Инструкции различаются в зависимости от модели вашей камеры. В этой статье мы кратко излагаем процедуры сброса пароля GoPro Wi-Fi в зависимости от модели камеры.

Сброс пароля Wi-Fi на GoPro HERO7 Black, Silver & White

Сброс пароля Wi-Fi на GoPro HERO6 Black / HERO5 Black / HERO (2018)

Сброс пароля Wi-Fi в сеансе GoPro HERO5

Сброс пароля Wi-Fi на GoPro HERO4 Silver & Black

Сброс пароля Wi-Fi в сеансе GoPro HERO / HERO4

Wi-Fi GoPro имеет пароль по умолчанию, и вы можете изменить пароль Wi-Fi в целях безопасности вскоре после регистрации. Однако могут быть случаи, когда вы не помните пароль Wi-Fi и это ухудшает ситуацию, когда ваш логин Wi-Fi на GoPro больше не сохраняется на устройствах. Система Wi-Fi, являющаяся важной частью камеры для сопряжения камеры с внешними устройствами для передачи файлов, единственный способ решить эту проблему — сбросить пароль Wi-Fi на камере GoPro.

1] Сброс пароля Wi-Fi на GoPro HERO7 Черный, Серебристый и Белый

  1. На вашей камере проведите пальцем вниз по главному экрану
  2. Перейдите в Предпочтения и выберите Соединения
  3. Теперь нажмите на Сбросить подключения.

После этого камера GoPro создаст новый пароль. Вы также можете изменить имя камеры во время сопряжения с приложением GoPro после сброса.

2] Сброс пароля Wi-Fi на GoPro HERO6 Black / HERO5 Black / HERO (2018)

  1. На вашей камере проведите пальцем вниз по главному экрану
  2. Перейти к подключению и выберите Сбросить подключения
  3. Теперь нажмите на кнопку сброса

После этого камера GoPro создаст новый пароль. Вы также можете изменить имя камеры во время сопряжения с приложением GoPro после сброса.

3] Сброс пароля Wi-Fi на сеансе GoPro HERO5

  1. Выключите камеру и нажмите кнопку меню, чтобы включить экран состояния.
  2. Постоянно нажимайте кнопку «Меню», пока не появится опция «Настройки подключения».
  3. Нажмите кнопку затвора, чтобы выбрать настройки подключения
  4. Теперь постоянно нажимайте кнопку «Меню», пока не появится опция «Сбросить подключения».
  5. Нажмите кнопку спуска, чтобы выбрать Сброс подключений
  6. Нажмите на кнопку меню, чтобы выбрать Да
  7. Нажмите на кнопку затвора, чтобы выбрать Да
  8. После этого камера GoPro создаст новый пароль.

Стоит отметить, что описанные выше шаги вернут вашу камеру к заводским настройкам.

4] Сброс пароля Wi-Fi на GoPro HERO4 Silver & Black

  1. На вашей камере нажмите и удерживайте кнопку настроек, пока не увидите параметры WiFi Mode.
  2. Удерживайте кнопку настроек и одновременно нажмите кнопку питания / режима на передней панели камеры.
  3. Отпустите кнопку питания/режима.
  4. В параметре «Сброс настроек Wi-Fi» нажмите «Сброс».

После этого камера GoPro создаст новый пароль. Вы также можете изменить имя камеры во время сопряжения с приложением GoPro после сброса.

5] Сброс пароля Wi-Fi на сеансе GoPro HERO / HERO4

  1. Включите камеру и выполните сопряжение камеры с приложением GoPro на вашем устройстве.
  2. Запустите приложение GoPro на вашем устройстве и перейдите в Настройки.
  3. Выберите информацию о камере и нажмите на имя опции

Теперь введите новое имя камеры и пароль. При установке нового имени камеры и нового пароля убедитесь, что оно содержит не менее восьми символов. Новый пароль и имя не должны содержать никаких специальных символов или не английских символов. При создании нового имени или пароля ограничьте символы 0… 9, A… .Z, a… z, ”-”, “@” или “_” и не используйте заводской пароль повторно.



2019-06-03T10:25:09
Вопросы читателей

Что делать, если интернет от «Мегафона» медленно работает или не работает совсем

Интернет от компании «Мегафон» имеет неплохую скорость и зону покрытия. Его подключают пользователи по всей России. Но в работе этого интернета время от времени могут возникать серьёзные проблемы. Давайте разберёмся, почему они появляются и как их решать.

Читать