Переключатель тем PHP с использованием cookie

#php #css #cookies

#php #css #файлы cookie

Вопрос:

Мне нужен простой способ обновить CSS моих сайтов для более широкого доступа.

Я нашел это, и это выглядит многообещающе: http://php.about.com/od/finishedphp1/ss/css_switcher.htm

Это код PHP, который он рекомендует:

index.php

 <!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Theme Test</title>
<link rel="stylesheet" type="text/css" href="<?php echo (!$style)?'normal':$style ?>.css" />
</head>

<body>

 <form action="changestyle.php" method="post">
 <select name="choice">
 <option value="classic" selected>Classic View</option>
 <option value="holiday">Holiday View</option>
 <option value="normal">Normal View</option>
 </select>
 <input type="submit" value="Go">
 </form>

</body>
</html>
  

changestyle.php

 <?php 
 $Year =31536000   time();
 setcookie ('style', $choice, $year);
 header("Location: $HTTP_REFERER"); 
 ?>
  

Однако это не удается, поскольку переменная таблицы стилей ‘style’, по-видимому, не объявлена.

Я упускаю что-то основное?

Ответ №1:

Это руководство далеко не многообещающее, помимо того факта, что оно открыто для уязвимостей XSS, оно даже не дает вам полного рабочего кода!

Попробуйте это для размера…

index.php

 <link rel="stylesheet" type="text/css" href="<?php echo (!isset($_COOKIE['style'])?'normal':$_COOKIE['style']) ?>.css" />
  

changestyle.php

 <?php
$year = 31536000   time();
setcookie('style', $_POST['choice'], $year);
header('Location: index.php');
exit();
  

Это не решит вашу проблему с XSS (т. Е. Кто-То изменит значение ‘choice’, чтобы вставить неприятный код на вашу страницу), но должно, по крайней мере, заставить его работать.

Для справки я бы проверил index.php чтобы проверить, что файл cookie соответствует списку жестко запрограммированных значений, а не просто повторяет значение, поскольку любой может это изменить (см. Что такое межсайтовый скриптинг и как вы можете это исправить?).

Комментарии:

1. Спасибо, приятель, да, сайт немного тупой. Я более подробно рассмотрю безопасность до запуска сайта, спасибо за совет.