gtomilin
@gtomilin
JavaScript HTML CSS

Насколько защищена представленная конструкция php?

Насколько безопасна данная конструкция с точки зрения взлома?
Есть форма логина - который проверяется файлом login.php следующего вида:

<?php

$login = !empty($_POST['login']) ? $_POST['login'] : '';
$password = !empty($_POST['password']) ? $_POST['password'] : '';

if ($login === 'login' && $password === 'password ') {
    echo 'рендер кода страницы с формами для создания новых файлов на сервере'
} else {
    echo 'Неверный логин';
}
?>

Логин пароль временные - основной вопрос по конструкции которая проверяет логин и пароль.
Всё размещается на хостинге.
  • Вопрос задан
  • 147 просмотров
Решения вопроса 3
FanatPHP
@FanatPHP
Чебуратор тега РНР
Пароль никогда не следует хранить в открытом виде.
Сгенерировать его через password_hash, вписать в скрипт и проверять через password_verify.
Помимо прочего это еще и затруднит подбор перебором.

Также код можно сильно сократить. Уже сто лет как в РНР есть сокращенный вариант проверки на isset, плюс можно сразу прервать выполнение, и не делать лишнюю вложенность
<?php

$login = $_POST['login'] ?? '';
$password = $_POST['password'] ?? '';
$hash = '$2y$10$e6RRGG8zFvsE6Bl7at/Vx./igFslOmnLo6poA6N1QoNWrgrkedHqO';

if ($login !== 'login' || !password_verify($password, $hash)) {
    die('Неверный логин');
}
echo 'рендер кода страницы с формами для создания новых файлов на сервере';


Закрывающий тег тоже не нужен
Ответ написан
Комментировать
profesor08
@profesor08 Куратор тега PHP
Конкретно тут, если отключить отображение предупреждений, можно прям в if проверять post.
if ($_POST['login'] === 'login' && $_POST['password'] === 'password ')


Но можно использовать filter_input и filter_var
function post($name, $default = null)
{
  return filter_input(INPUT_POST, $name, FILTER_SANITIZE_STRING);
}

echo post("password");
Ответ написан
@MadridianFox
Web-программист, многостаночник
Уязвимость - это когда злоумышленник использует такие варианты параметров, обработку которых разработчик не предусмотрел.
Варианты обработки параметров - это не только когда мы явно сравниваем переменную с чем-то. Например печально известная функция printf() в языке Си принимает шаблон и значения, которые в него надо ставить, если шаблон может ввести пользователь, то он может подобрать такой шаблон, который выдаст больше чем планировал разработчик.
printf - потенциально уязвимая функция.
К потенциально уязвимым функциям можно отнести интерпретирующие функции. Например запрос к БД. Например через одну лишь функцию mysql_query() можно в теории сделать с БД что угодно.
Это "что угодно" ограничивается тем какой запрос передаётся в функцию. Однако если запрос хоть как-то зависит от того что ввёл пользователь, то разработчику надо предусмотреть любые варианты ввода пользователя так, чтобы запрос продолжал делать то что нужно разработчику, а не пользователю.
Но не только лишь божественные интерпретирующие функции кроют в себе опасность. Например сохранение некоторой строки в БД и последующий вывод этой строки на страницу тоже может быть опасным, хотя при записи в БД эта строка безопасна. Я говорю о подстановке js кода в страницу, которая будет показана другому человеку.
Т.е. варианты использования введёного пользователем параметра не ограничиваются той функцией которая непосредственно обрабатывает введённый параметр, но и накапливаются дальше за всё время использования данных, которые когда-то ввёл пользователь.

К чему я это всё?
К тому, что для того чтобысказать уязвим ли этот код, нужно оценить как на него повлияют разные варианты введённого логина и пароля или других параметров, которые возможно есть в этом скрипте.
Я не вижу в этом коде божественных функций, не вижу никакого другого использования введённых параметров кроме их сравнения с литералом. На основании этого могу сказать, что код вполне надёжен.
Конечно, всегда есть опасность того, что, допустим по историческим причинам оператор === для строк имеет особое поведение, когда в строке есть символ 0xFFAA.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
xmoonlight
@xmoonlight
https://sitecoder.blogspot.com
Я лично привык доверять только регуляркам!)
И юзать preg_match() и подобные..
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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