PHP Может ли клиент когда-либо устанавливать переменные $_SESSION?

Существует ли какой-либо сценарий, когда клиент/пользователь/хакер может устанавливать сами переменные $_SESSION (исключая вредоносное программное обеспечение, запущенное на компьютер-сервере. В основном я имею в виду через браузер)?

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

Чтобы сделать это как можно проще, если я проверяю каждую страницу с чем-то вроде isset($_SESSION['validated']), безопасно ли это?

Ответ 1

Да, если вы присваиваете переменные $_SESSION непосредственно для нефильтрованного ввода пользователя.

Что подводит меня к моей точке: НИКОГДА НЕ ДОЛЖЕН ВХОДИТЬ ИЗ ПОЛЬЗОВАТЕЛЯ. EVER

Если вы действительно фильтруете вход, то я не вижу, как это можно сделать.

Ответ 2

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

Ответ 3

Я не совсем понимаю вопрос, но этот вопрос объясняет мой способ того, что я думаю, что вы хотите сделать.

Убедитесь, что вы включили jQuery.

код:

<html>
<head>
  <title>Tab name</title>
  <meta charset = "UTF-8" />
  <script type = "text/javascript" src = "http://code.jquery.com/jquery-1.1.13.min.js"></script>
  <script type = "text/javascript" src = "script.js"></script>
</head>
<body>
</body>

</html>

Затем создайте файл с именем addsession.php.

Код для addsession.php:

<?php session_start(); ?>
<?php
  if(isset($_POST["name"])){
    $name = $_POST["name"];
  } else {
    print '<p style = "color: red; font-weight: bold;">Name not defined!</p>' . "\n";
    $name = "unknownsessionvariable";
  }
  if(isset($_POST["value"])){
    $value = $_POST["value"];
  } else {
    $value = "";
  }
  $_SESSION[name] = value;
?>

Код для script.js:

function session(name, value){
  $.post(addsession.php, {"name" : name, "value" : value});
  window.location.reload(); // This line maybe should be here depending on what you are doing.
}
$(document).ready(function(){
  session("sessvar", "supervalue");
});

Пример фрагмента кода:

function session(name, value){
  $.post("http://www.eastonwerling.com/addsession.php", {"name" : name, "value" : value});
  //window.location.reload();
$(document).ready(function(){
  session("sessvar", "supervalue");
});
<script src="http://code.jquery.com/jquery-1.11.3.min.js"></script>
<p>This example depends on www.eastonwerling.com (my website).</p>

Ответ 4

Да, это возможно. Читайте о "Отравление сеанса" и еще одна довольно распространенная проблема безопасности Фиксация сеанса в Википедии или Google - в Интернете полно статей об этом.