Проверка сеанса обошла уязвимость

У нас есть 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 секунд), что не похоже на то, что кто-то имеет пароль для раздела администратора и выполняет действия вручную ,

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

0

Решение

Я видел две уязвимости:

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
Ссылка на сайт

7

Другие решения

Если у администратора есть активный сеанс, и хакер каким-то образом узнает ценность их PHPSESSID cookie, они могут отправить cookie и захватить сессию.

Убедитесь, что вы используете SSL-шифрование, чтобы кому-то было трудно подслушивать соединение и получать куки.

0

По вопросам рекламы [email protected]