我听说因为我的index.php
,我的网站或整个服务器都很容易入侵就是这样:
<?php
include_once 'config.php';
include_once 'includes/mysqlconnect.php';
$url_slash=$_SERVER['REQUEST_URI'];
$url= rtrim($url_slash, '/');
?>
<head>
<meta charset="UTF-8">
<title>Site Title</title>
<link rel="stylesheet" type="text/css" href="<?php echo $domain;?>themes/reset.css">
<link rel="stylesheet" type="text/css" href="<?php echo $domain;?>themes/<?php echo $theme;?>.css">
</head>
<body class="body">
<div class="container-all">
<?php include_once 'includes/header.php';?>
<div class="container">
<?php include_once 'includes/navigationbar.php';?>
<?php include_once 'includes/rightsidebar.php';?>
<div class="content"><?php
if ($url==''){
include_once "sites/home.php";
}
elseif (file_exists("sites/$url.php") && is_readable("sites/$url.php")){
include_once "sites/$url.php";
}
else {
include_once 'sites/404.php';
}
?></div>
<?php include_once 'includes/footer.php';?>
</div>
</div>
</body>
我的.htaccess
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
如何阻止人们输入example.com /../../../ somefilepeoplemaynotsee.txt
我真的想保持我的网址清洁,所以没有关于example.com?page=example 我想通过在/ var / www / html / sites / dir中创建一个文件来添加一个站点,然后我添加了一个页面。这是它的工作原理,但正如所说。它的安全风险很大:/ 我真的希望保持我的网站动态
任何想法
答案 0 :(得分:-1)
使用basename
,请参阅:http://php.net/basename
示例:
$url = rtrim($url_slash, '/');
$url = basename($url);
(注意:这是在最简单的级动态。使用像已知路由的MVC这样的东西可能更安全)
答案 1 :(得分:-1)
为了防止出现本地文件包含漏洞,您必须先验证用户输入,然后再尝试将其用作包含的文件名。
if (!preg_match("/[^A-Za-z0-9]/", $url)){
// user input is valided to A-Za-z0-9
if(file_exists("sites/$url.php")){
include_once "sites/$url.php";
}
}
这假设您只放置要包含在sites
目录中的脚本。显然,如果你有其他代码不包括在内,那么你需要使用白名单。