php - 菜单和 PHP GET CSS 选择器中包含的 CSS 文件

标签 php html css security themes

我需要访问者使用简单的下拉菜单主题选择器更改主题颜色和背景。选择菜单会将表单发送到带有 GET 字符串 ?theme=choice 的 index.php,PHP 将采用此 GET 并将其转换为站点的 css 主题。我有 5 个不同的 CSS 文件(主题)。

选择菜单已完成,但现在我需要 PHP 以正确且安全的方式处理表单。我不知道 Cookie 是否是一个好方法,但很多人说 cookie 不是一个好主意,所以我的想法是可能只是将 ECHO 主题和 GET 主题添加到所有页面。

这是我有但没有用的。我不知道如何让它变得更好,欢迎任何想法和帮助。

<head>
<?php
$theme = $_GET['theme'];
$security = mysqli_real_escape_string($theme); 
//don't know if needed because database will not be used for this

$onlynumbersandletters = preg_replace('/[^A-Za-z0-9\-]/', '', $security);
//allow only letters and numbers for more safety is needed ? 
// No database used but can someone hack a GET for this like in MySQL ?

//CODE
if(!empty($_GET['theme'])){
     echo '<link rel="stylesheet" type="text/css" href="css/default.css" />';
}

else {
     echo '<link rel="stylesheet" type="text/css" href="css/$onlynumbersandletters.css" />';
}

?>
<!-- other elements in head -->
</head>

我是 PHP 的新手,我不知道代码是否安全或可以改进,但是从选择菜单更改时我没有得到正确的主题。

有什么想法吗?

最佳答案

仅当字符串在双引号中时,才能将变量打印到字符串中。你是单例,因此 $onlynumbersandletters 不会打印出来。它应该是这样的:echo '<link rel="stylesheet" type="text/css" href="css/'.$onlynumbersandletters.'.css" />';

用于存储此内容的 Cookie 没问题。并出于您的安全考虑。如果您计划仅将该变量用于选择 css,则攻击者不会造成太大危害。但如果必须,您可以检查 $theme 是否与您的 css 文件之一相同,如果不相同则显示默认模板。

$dirty = isset($_GET['theme']) ? $_GET['theme'] : 'default';
$theme = preg_replace('/[^A-Za-z0-9\-]/', '', $dirty);
if (file_exists("./css/" . $theme . ".css")) {
    echo '<link rel"stylesheet" type="text/css" href="css/'.$filename.'.css" />';
} else {
    // what to do if file is not on disk?
}

正则表达式替换用于删除斜杠,以防止查找 ./css 目录之外的服务器上的 css 文件。

关于php - 菜单和 PHP GET CSS 选择器中包含的 CSS 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28918083/

相关文章:

php - 什么可以限制 MYSQL 表中自增索引列的值达到过大?

javascript - 使用 XSL 将 XML 属性作为 id 传递到 HTML

javascript - 在部分之间创建 flex 的叠加层。

html - 如何在列中创建额外的行

php - 表 A 中的一个字段在表 B + mysql + php 的一个字段中

php - 如何从使用 sparqllib 完成的查询中获取 SPARQL 的 ASK 答案?

php - "Unsanitizing"数组中的元素

javascript - jQuery getScript 不会加载脚本

javascript - 替换多个类 onScroll?

javascript - 为什么我可以设置任何事件类型字符串来调用 addEventListener 而没有 setTimeout 我会失去我的 css 效果?