Существует ли какой-либо сценарий, когда клиент / пользователь / хакер может самостоятельно устанавливать переменные $_SESSION
(исключая вредоносное программное обеспечение, запущенное на компьютер-сервер. В основном я имею в виду через браузер)?
Причина, по которой я спрашиваю, из-за этого вопроса, который я задал несколько дней назад. С тех пор я довольно запутался в этом вопросе, но у меня есть лучшее представление о фиксации и захвате сеанса.
Чтобы сделать это как можно проще, если я проверяю каждую страницу с помощью чего-то вроде isset($_SESSION['validated'])
, безопасно ли это?
Да, если вы присваиваете переменные $_SESSION
непосредственно для нефильтрованного ввода.
Это подводит меня к моей точке: НИКОГДА НЕ ДОЛЖЕН ВХОДИТЬ ИЗ ПОЛЬЗОВАТЕЛЯ. КОГДА-ЛИБО
Если вы действительно фильтруете вход, тогда я не вижу, как это можно сделать.
Я не думаю, что переменные $ _SESSION могут быть изменены, если у пользователя нет доступа к серверу, иначе они не могут его изменить, но фильтрация переменных или дезинфекция рекомендуется, если это то, что пользователь вводит.
Я не совсем понимаю вопрос, но этот вопрос объясняет мой способ того, что я думаю, что вы хотите сделать.
Убедитесь, что вы включили 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>
Да, это возможно. Читайте о отравлении сеанса и еще одной довольно распространенной проблеме безопасности. Фиксация сеанса в Википедии или Google – в Интернете полно статей об этом.