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 - в Интернете полно статей об этом.