Передача флажков в виде массива - kush:
<input type="checkbox" name="myarray[key1]" value="hello world" />
<input type="checkbox" name="myarray[key2]" value="well hello again" />
Создает результирующий $ _POST как:
Array
(
[myarray] => Array
(
[key1] => hello world
[key2] => well hello again
)
)
Хотя это здорово, это также означает, что ваш код боссов вдвойненебезопасно:
Во-первых, отсутствие strip_tags
делает вас уязвимым для атак XSS.
Во-вторых, наивно доверяя $_POST
именам переменных и экспортируя их в глобальное пространство имен, это рецептдля катастрофы.(Существует причина, по которой register_globals ушла в прошлое).
Например, предположим, вы отслеживаете имя пользователя, который вошел в систему, используя простую переменную $_SESSION
.Примерно так:
if ($_SESSION['logged_in_user'] == 'admin') {
// do administrator things
}
Ну, приняв и экспортировав $_POST
переменные, злоумышленник может изменить элемент HTML-формы следующим образом:
<input type="checkbox" name="myarray[key1]" value="hello world" />
И превратить его в нечто подобное(используя Firebug или Chrome):
<input type="checkbox" name="_SESSION[logged_in_user]" value="admin" />
Тэд-ах!Любой анонимный пользователь может получить доступ администратора к веб-сайту.
Вот простой скрипт для вашего рассмотрения:
<code><pre>
<?php
session_start();
$_SESSION['logged_in_user'] = 'pygorex1';
print_r($_SESSION);
foreach ($_POST as $k => $v) {
$$k = $v;
}
?>
иди иди гаджет
<?php
print_r($_SESSION);
print_r($myarray);
session_write_close();
if ($_SESSION['logged_in_user'] == 'admin') {
echo("OWNED\n");
}
?>