【发布时间】:2014-05-27 11:31:17
【问题描述】:
我有以下 PHP 页面:
index.php
if( isset($_POST['location']) ) {
$location = $_POST['location'];
} else {
$location = 'home';
}
require 'header.php';
switch ($location) {
case "home": require 'home.php'; break;
case "about": require 'about.php'; break;
case "products": require 'products.php'; break;
case "budget": require 'budget.php'; break;
case "contact": require 'contact.php'; break;
case "help": require 'help.php'; break;
default: require 'home.php';
}
require 'footer.php';
?>
在我拥有的 HEADER 内:
header.php
<body class="<?php echo $location; ?>">
<div id="navmenu">
<ul id="menu">
<li><a id="page_item_1" href="?location=home">Home</a></li>
<li><a id="page_item_2" href="?location=about">About</a></li>
<li><a id="page_item_3" href="?location=products">Products</a></li>
<li><a id="page_item_4" href="?location=budget">Budget</a></li>
<li><a id="page_item_5" href="?location=contacto">Contact</a></li>
<li><a id="page_item_6" href="?location=help">Help</a></li>
</ul>
</div>
但是没有任何效果...位置 POST 发生了变化,但主体的类没有改变。并且正文的内容需要(不加载 home/about/etc.php)。
我做错了什么? 谢谢。
【问题讨论】:
-
fyi,
<body class="<?php echo $location ?>">对 XSS 开放 -
你在 body 类中少了一个分号
-
XSS 问题是分号?我将它添加到我的代码中。
-
@user3529213 在该特定行中不需要分号,因为它后跟结束标记
?>。 XSS 问题是您无法防止用户将 javascript 添加到$_GET['location']var,因此当您在 html 中回显 $location 时,允许将任意代码注入页面。在向用户显示用户提供的数据时,您应该使用htmlentities()。 -
好的,我读了那部分,这是一本很长的圣经,你能否更具体地说明我应该使用 htmlentities() 的什么特性?或者某个示例的链接?提前致谢。
标签: php html css post classname