我想了解一下目前我的网站有多安全;我刚刚意识到我在处理网站内容的方式上有一个漏洞,所以我想确保我没有任何其他问题。
我的网站工作如下:只有一个实际的“文件”(页面模板)是被请求的。
使用AJAX,每次单击链接时都会将内容加载到页面正文中(因此页脚和页眉始终保持在原处)。
这些页面的内容存储在与我的网站类似的数据结构中的JSON中(即example.com/about的内容将存储在example.com/json/about/data.json中)。我使用JSON是因为不仅存储了页面主体的html,而且还存储了一些定制的CSS (将被注入到标题中)、页面的标题以及其他一些属性。
当从服务器获取主体内容时,使用连接器脚本(example.com/getcontent.php)检索页面的适当内容。之所以使用这个连接器脚本,是因为在JSON主体内容中,有需要它的页面的PHP代码。连接器脚本提取内容,然后将输出发送到浏览器。
我发现的安全漏洞是,任何人都可以直接访问example.com/json/ page /data.json,并阅读我在正文中为每个页面编写的所有PHP代码。我计划在创建JSON后使用mcrypt加密JSON,并在get.php中再次使用mcrypt对其进行解密。
由于这是一个很大的安全漏洞,在我看来,我想知道是否有人会想到类似的东西,可能是错误的我的设置。
注意:只有才能访问服务器(因此,只有我可以创建一个不应该被评估的JSON ),所以不应该被评估的内容不是一个问题,因为我是为每个页面编写内容的人。
发布于 2011-06-22 04:23:59
将JSON数据保存在web根目录之外,并确保getcontent.php只提供来自该目录的数据。
因此,如果您的web根目录是/home/ So /htdocs,例如,将json存储在/home/So/data中。
在那个getcontent.php里,确保你把所有的..。从输入或使用如下所示的realpath:
define(APP_ROOT, '/home/website');
$p = realpath(APP_ROOT.'/data/'.$_SERVER['PATH_INFO']);
if (!preg_match('#^'.realpath(APP_ROOT).'#', $p)){
header('HTTP/1.0 403 Forbidden');
die("Access denied");
}
然后,您可以通过一个URL以getfile.php/path/to/json-file.json的形式引用该数据文件夹中的任何文件。
https://stackoverflow.com/questions/6439682
复制