У нас есть php-страница, которая является административной частью сайта. Он используется для выполнения некоторых действий по обновлению базы данных. Код выглядит следующим образом
session_start();
if (!isset($_SESSION['somevariable']) )
{
header("Location:loginpage.php");
}$id=$_GET['somevariable];
$sql = "UPDATE sometable SET somecolumn='' where someothercolumn=?";
$stmt = $con->prepare($sql);
$stmt->bind_param('s',$id);
$stmt->execute();
Мы заметили, что была какая-то уязвимость, и этот фрагмент кода, кажется, выполняется из неизвестного источника с периодическим интервалом (5 секунд), что не похоже на то, что кто-то имеет пароль для раздела администратора и выполняет действия вручную ,
Мы хотели бы знать, может ли хакер обойти эту проверку входа в систему и выполнить оставшуюся часть кода без пароля? Любое понимание уязвимости в приведенном выше фрагменте кода будет полезным. заранее спасибо
Я видел две уязвимости:
1) CSRF (используя переменную непосредственно из метода get)
2) Выход не используется после вызова функции заголовка
Правильный код должен быть таким:
<?php
header("Location: http://www.example.com/"); /* Redirect browser */
/* Make sure that code below does not get executed when we redirect. */
exit;
?>
Смотрите документ php.net
Ссылка на сайт
Если у администратора есть активный сеанс, и хакер каким-то образом узнает ценность их PHPSESSID
cookie, они могут отправить cookie и захватить сессию.
Убедитесь, что вы используете SSL-шифрование, чтобы кому-то было трудно подслушивать соединение и получать куки.