问题标签 [superglobals]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
php - $_SERVER["HTTP_HOST"] 有多安全?
我有一个充满网站网址的数据库,主键是$_SERVER["HTTP_HOST"]
网站的。
当用户导航到 ... 可以说www.my-epic-example-url.com
,它将连接数据库并使用该$_SERVER["HTTP_HOST"]
网站的,然后获取引用该网站的所有数据!
我想知道的是,安全性如何$_SERVER["HTTP_HOST"]
?
可以外部修改吗?
我问的唯一原因是因为我不久前读过一篇文章(不记得它在哪里)说使用 $_SERVER 时要小心,因为它不安全......
这是真的?
php - 如果给 $_REQUEST 赋值会发生什么?
我最近在 PHP 脚本中遇到了这一行:
是否允许或以任何方式将某些东西分配给超级全局 $_REQUEST 变量?如果有 $_COOKIE['start_date'] 这会改变 cookie 的值吗?
php - 在包含 URL 的页面中清除 $GLOBALS
当我使用它的完整 URL(如include 'http://mysite.tld/mypage.php'
)包含一个页面时,我不能使用$GLOBALS
in mypage.php
,它会返回Undefined index
错误。
但是当我使用它的相对路径(如include 'mypage.php'
)包含它时,就可以了。
我使用 URL 而不是相对路径的原因是我想包含$_GET
参数mypage.php
这种奇怪的行为有什么合乎逻辑的解释吗?
请注意,这两个文件位于同一台服务器上的同一目录中。
php - 为什么设置超全局变量 $GLOBALS['foo'] 不起作用?
以下代码会产生警告:
警告是:
Notice: Undefined variable: foo
怎么来的 ?
php - 从 Zend Framework 2 中的路由获取 $_GET 参数
Zend Framework 1 有一种非常简单的方法来解析 URL 路由并在 $_GET 超全局中设置找到的参数以便于访问。当然,您可以在控制器中使用 ->getParam($something),但如果在 URL 中找到参数,也可以通过 $_GET 访问它。
网址示例mypage.com/mymodule/mycontroller/myaction/someparam/5:
ZF1
ZF2
显然,不同之处在于 ZF2 没有将路由参数放入 $_GET 超全局变量中。
我如何使它将解析的参数放入 $_GET 超全局,因为扩展控制器并只定义一个构造函数是不可能的(因为 RouteMatch 还不是一个对象,不能从控制器的构造函数中调用)?
调用$_GET = $this->getEvent()->getRouteMatch()->getParam('someparam');
我的每个控制器都可以,但我不希望这样。
换句话说,按照上面的示例 URL,我希望能够执行 $_GET['someparam'] 并且仍然在应用程序的任何组件中获得值“5”。
编辑:看起来我不够清楚,所以我会尝试澄清更多。我希望我通过 /key/value 格式在 URL 中输入的任何参数都可以立即在 $_GET 中使用。我在获取参数方面真的没有问题,我知道如何获取它,我扩展了 Zend 的控制器,所以我可以像在 ZF1 中一样再次调用 $this->getParams,现在所有控制器都扩展了那个,我只是想要URL 中的参数也自动位于 $_GET 中,因此我可以在本机使用 $_GET 的第三方组件中轻松访问它们。
编辑 2:更新为对 Samuel Herzog 的回答的反应:在这种情况下,我真的不介意使 SRP 无效,因为这些库的构建方式使得它们需要直接访问 $_GET - 它们进行自己的过滤并直接依赖在这个超全球。他们还直接获取 $_FILES 和 $_POST 进行处理,这正是他们的代码的工作方式。
我在抽象控制器中创建了以下方法: $this->mergeGet(); 这基本上使 $_GET 吸收了所有路由匹配的参数,并且一切都按预期工作,但是由于每个控制器/动作都需要库,因此每次调用该方法可能会变得乏味。如果只有控制器有一个像 ZF1 中的 init() 方法......
undefined - PHP-CLI 脚本在被 Apache 调用时不知道 $_SERVER?
这是一个奇怪的:
我有一个 PHP-CLI 脚本,当从 shell 调用时它运行得很好。
但是当我让 apache 执行它时,system()
它似乎忘记了所有的超全局变量(或至少$_SERVER
)(它们是1
/ true
)。
关于它来自哪里的任何想法?
php - 变量变量和超全局变量
我正在将一个巨大的 PHP 软件从 PHP4 过渡到 PHP5,在我面临的许多(许多)问题中,迄今为止最大的一个似乎是以前的程序员刚刚对 register_globals 功能进行了宴会,不时抛出一些变量不指定来源,并无耻地将警告和通知隐藏在地毯下。
我试图通过创建一个迭代数组(作为参数传递)并通过“变量变量”功能创建全局变量的函数来解决这个问题,然后在每个页面中调用它来获取$_POST
,$_GET
和$_SESSION
. 这是代码:
这个函数的问题是条件isset($$key)
永远不会为真,因此括号内的代码总是被执行并覆盖之前的声明。
这种行为有什么解释吗?我阅读了 PHP 文档,其中指出
请注意,变量变量不能在函数或类方法中与 PHP 的超全局数组一起使用。
但我不明白这是否与我的问题有关(说实话,我也不明白这意味着什么,我找不到任何例子)。
PS:请不要告诉我使用全局变量和/或变量变量是不好的编程,我自己对此非常了解,但另一种选择是修改大约 2.700 个文件,每行有一千行代码每行,我是这里唯一的程序员......但如果你知道一个更好的解决方案来摆脱所有那些“未定义的变量”警告,你可以让我开心。
PPS:对我的英语也有耐心^_^
php - “注册”一个变量到底是什么意思
这是关于 PHP 全局变量的。这是否意味着全局变量通过 HTTP 请求简单地赋值(即:预先存在但没有值的变量),或者变量被“实例化”并赋值(即:脚本中不预先存在的变量) ? 我还没有看到任何解释的文字。
php - 可以像超级全局变量一样在每个页面上使用的自定义变量?
我希望一个变量是超全局的,但是由于我使用的是程序风格,我认为我不能自己制作一个,所以基本上问题是使用查询从安全表中检索我的网站的所有安全控制,我检查维护模式是否打开/关闭,如果打开,则将其重定向到维护页面下的网站,因此在每个页面上我需要检查变量的状态,$maintenance_status
为此,我需要在每个页面上调用该查询,否则我收到一个未定义变量的错误,此外,如果我正在创建一个函数并将该函数文件包含在其他页面中,它向我显示$db_connect
(这是我的数据库连接变量)未定义,我将我的页面包含在这个序列中
知道如何在每个页面上提取此状态吗?我想为常见查询创建一个新文件,但它是一个干净的解决方案吗?此外,我想我不理解包含,如果我connection.php
之前包含而functions.php
不是为什么我functions.php
显示未定义的变量$db_connect
?
php - $_SERVER['SERVER_NAME'] 有什么好的替代品吗?
我在PHP 文档页面上阅读了以下评论:
“请注意,服务器数组的大部分内容(甚至 $_SERVER['SERVER_NAME'])都是由客户端提供的并且可以被操纵。它们也可以用于注入,因此必须像任何其他用户输入一样进行检查和处理。”
然后我在 StackOverflow 上看到一个话题,说 $_SERVER['SERVER_NAME'] 部分是服务器控制的。
我可以相信这个值来获取我网站的网址吗?如果我不能真正信任 $_SERVER['SERVER_NAME'],我怎样才能得到这个值?有哪些可能的替代方案及其优缺点?
OBS: Apache、Unix 上的 PHP 5.3。