Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/286.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 阻止访问$\u会话、$\u服务器、$\u发布、$\u获取、$\u请求_Php - Fatal编程技术网

Php 阻止访问$\u会话、$\u服务器、$\u发布、$\u获取、$\u请求

Php 阻止访问$\u会话、$\u服务器、$\u发布、$\u获取、$\u请求,php,Php,我正在考虑构建一个新的PHP应用程序,允许添加新的模块。由于我还在考虑设计结构和安全性的早期阶段,我想到了一个问题: 我是否可以阻止第三方模块访问$变量($\u会话,$\u服务器,等等),除非通过某个作为应用程序核心的控制器类?如果这是可能的,我该如何实现呢?您可以设置一个输入类,在控制器看到这些值之前,将其读入,然后将其重置为空的数组()。控制器仍然可以访问它们,但无法从中检索任何输入。因此,它们将被迫转到您的输入对象以获取用户输入 如果您这样做的目的是进行XSS筛选,那么值得记住的是,您通常

我正在考虑构建一个新的PHP应用程序,允许添加新的模块。由于我还在考虑设计结构和安全性的早期阶段,我想到了一个问题:


我是否可以阻止第三方模块访问$变量(
$\u会话
$\u服务器
,等等),除非通过某个作为应用程序核心的控制器类?如果这是可能的,我该如何实现呢?

您可以设置一个输入类,在控制器看到这些值之前,将其读入,然后将其重置为空的
数组()。控制器仍然可以访问它们,但无法从中检索任何输入。因此,它们将被迫转到您的输入对象以获取用户输入

如果您这样做的目的是进行XSS筛选,那么值得记住的是,您通常需要处理受污染的数据(即,包含危险字符
)。在这些情况下,您可能需要以下内容:

$inputHolder->getRawValue('comment');
在通常情况下(特别是对于整数等,欢迎使用危险字符过滤):

我没有使用它,但我注意到流行的PHP框架CodeIgniter提供了一个

值得注意的是,这种方法的反论点——有些人会说,在这里进行过滤是错误的。在理想情况下,您应该在控制器中处理受污染的输入,将其传递到视图/模板层,并在那里转义(例如,使用
htmlentities()
)。或者,您可以在控制器中取消着色/强制转换,以便在不转义的情况下安全渲染


然而,总是有可能遗漏一些东西,特别是在大型应用程序中。因此,也许拥有该选项是一件好事:默认情况下的安全性,经过深思熟虑的原始输入。这让我想知道,CI类中的参数选项是否正确-看看。

可以。您可以将它们复制到fa中VoRITE数据结构,然后取消它们。但是什么?它不应该由用户来决定吗?当构建一个新的应用程序或框架时,也许你应该首先考虑可能性而不是增加限制。是的,正如其他人提到的,在你的应用程序的入口点,你将这些超全局变量复制到某个对象的属性。您现在可以将对象传递给您想要访问它们的方法。不会取消它们导致PHP会话的其他问题吗?我确实考虑过撤销它们,但是我不知道PHP会话的内部操作和服务器是如何工作的,以知道这是否会引起问题(特别是关于$$server)。@GolezTrol这不会影响附加模块的用户专用开发人员,在我看来,这实际上会让最终用户更安全,因为我的应用程序可以控制每个模块可以访问和更改的信息。否则,可以创建一个模块,通过创建适当的会话来模拟登录用户variables@537MFB在插件系统的上下文中,编写插件的程序员是系统的用户,不会因为PHP会话而造成其他问题吗?我确实考虑过撤销它们,但是我不知道PHP会话的内部操作和服务器是如何工作的,以知道这是否会引起问题。(特别是关于$\u服务器)只要看看你链接到的网站-真的很酷-除非有人想出更好的我会给你this@537mfb,是的,我可能会谨慎地清除
$\u服务器
。其中的哪些内容可能会被污染?当然是用户代理,不确定其他内容?正如我所说,我会将它们重置为空数组,而不是取消它们的设置。我不只是在考虑在考虑这种方法时不受污染-我也在考虑最终用户的安全性。我没有正确地看到$\u服务器的情况,但例如,我想通过在$\u会话中初始化正确的变量来防止第三方模块模拟登录用户(示例)-尽管$\u服务器确实包含标识数据(如remnote IP)用户可以(应该?)从第三方获得保护security@537mfb:如果您允许不受信任的开发人员在此处运行代码,那么您唯一可以信赖的就是信任这些开发人员(例如,他们希望保护一个有价值的品牌)或代码审查。
$inputHolder->getValue('page');