阻止访问$ _SESSION,$ _SERVER,$ _POST,$ _GET,$ _REQUEST

时间:2014-07-20 21:57:10

标签: php

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

我是否可以阻止第三方模块访问$ _变量($_SESSION$_SERVER等),除非通过应用程序的核心控制器类?如果可以的话,我该如何实现呢?

1 个答案:

答案 0 :(得分:0)

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

如果你这样做的目的是XSS过滤,那么值得注意的是,你经常需要处理污染数据(即包含危险字符<>'")。在这种情况下,你可能需要这样的东西:

$inputHolder->getRawValue('comment');

并且在通常的情况下(特别是对于整数等,欢迎危险的字符过滤):

$inputHolder->getValue('page');

我没有使用它,但我注意到流行的PHP框架CodeIgniter提供了similar feature to this

值得了解这种方法的反驳 - 有些人会说这是过滤的错误地方。在理想的世界中,您将在控制器中处理受污染的输入,将其传递到视图/模板层,然后在那里将其转义(例如使用htmlentities())。或者,您将在控制器中进行解开/转换,以便在不转义的情况下进行渲染是安全的。

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