Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
基于PHP/AJAX的整体网站安全_Php_Javascript_Ajax_Json_Security - Fatal编程技术网

基于PHP/AJAX的整体网站安全

基于PHP/AJAX的整体网站安全,php,javascript,ajax,json,security,Php,Javascript,Ajax,Json,Security,我想了解一下我目前的网站安全性如何;我刚刚意识到,我在处理网站内容方面存在漏洞,所以我想确保我没有任何其他问题 我的网站的工作原理如下:只请求了一个实际的“文件”(页面模板) 使用AJAX,每次单击链接时内容都会加载到页面主体中(因此页脚和页眉始终保持不变) 每个页面的内容都以JSON格式存储在与我的网站类似的数据结构中(即example.com/about的内容将存储在example.com/JSON/about/data.JSON)。我使用JSON是因为不仅存储了页面主体的html,还存储了

我想了解一下我目前的网站安全性如何;我刚刚意识到,我在处理网站内容方面存在漏洞,所以我想确保我没有任何其他问题

我的网站的工作原理如下:只请求了一个实际的“文件”(页面模板)

使用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对其进行加密,然后在get.php中再次使用mcrypt对其进行解密

由于这是一个如此大的安全漏洞,在我看来,我想知道是否有其他人可以想到类似的东西,可能是我的设置错误


注意:只有我有权访问服务器(因此,只有我才能创建被评估的JSON),因此,不应该评估的内容不是问题,因为我是为每个页面编写内容的人。

将JSON数据保留在web根目录之外,并确保getcontent.php只提供来自该目录的数据

因此,如果您的web根目录是/home/website/htdocs,那么可以将json存储在/home/website/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");
}

然后,您可以通过getfile.php/path/to/the/json file.json格式的URL引用该数据文件夹中的任何文件,将json数据保持在web根目录之外,并确保getcontent.php仅提供来自该目录的数据

因此,如果您的web根目录是/home/website/htdocs,那么可以将json存储在/home/website/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");
}

然后,您可以通过getfile.php/path/to/the/json file.json格式的URL引用该数据文件夹中的任何文件,我删除了以前的答案,因为我误解了您的意思。(这个问题真的不是很清楚,所以我可能还是不明白)

我仍然认为,在服务器上使用
eval()
会带来安全风险。无论您认为自己控制得多么严格,如果您的PHP代码包含一个
eval()
调用,那么它很有可能被黑客攻击

不要冒险:不要在PHP中使用
eval()曾经

此外,使用
eval()
意味着PHP无法预编译代码,因此它的运行速度比普通PHP代码慢得多

您可以在客户端Javascript中使用
eval()
,因为(a)这是在某些浏览器中解析JSON的唯一方法,(b)客户端可以使用Firebug或类似工具运行任何他喜欢的Javascript代码。(不过,它仍然很慢,因此您仍应尽可能避免使用它)


†[编辑]为了安抚@symcbean,我应该澄清,您不应该使用
eval()。然而,这些情况很少出现:我见过大量使用
eval()
,但我从未见过正确使用它的代码;代码总是很糟糕。

我删除了以前的答案,因为我误解了你的意思。(这个问题真的不是很清楚,所以我可能还是不明白)

我仍然认为,在服务器上使用
eval()
会带来安全风险。无论您认为自己控制得多么严格,如果您的PHP代码包含一个
eval()
调用,那么它很有可能被黑客攻击

不要冒险:不要在PHP中使用
eval()曾经

此外,使用
eval()
意味着PHP无法预编译代码,因此它的运行速度比普通PHP代码慢得多

您可以在客户端Javascript中使用
eval()
,因为(a)这是在某些浏览器中解析JSON的唯一方法,(b)客户端可以使用Firebug或类似工具运行任何他喜欢的Javascript代码。(不过,它仍然很慢,因此您仍应尽可能避免使用它)


†[编辑]为了安抚@symcbean,我应该澄清,您不应该使用
eval()。然而,这些情况很少出现:我见过大量使用
eval()
,但我从未见过正确使用它的代码;代码总是很糟糕。

我不明白你为什么要将PHP代码发送到另一个eval()的文件中,这似乎是整个网站的一个设计缺陷,而不仅仅是安全性。投票关闭这个网站-正确评估网站的安全性需要几天/几周甚至几个月的时间。这里的帖子中有几行是不正确的