问题标签 [magic-constants]

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.

0 投票
1 回答
146 浏览

php - 使用 PHP 魔术常量有哪些安全风险?

PHP 的魔法常量允许您访问诸如当前正在执行的 PHP 文件、当前函数的名称等信息。

虽然这些数据不是用户直接输入的,但它肯定会受到用户输入的影响(例如:通过访问特定路径来影响__dir____file__等),但是在大多数情况下,远程用户输入不可能准确地影响这些变量.

例如,如果您要访问example.com/<script>window.alert("XSS");</script>,这不会导致__file__该服务器上的变量包含恶意 JavaScript。相反,它将包含您的 404 ErrorDocument 的路径(假设 XSS 示例不是您服务器上的实际路径)。

恶意数据还有哪些其他方式可以进入这些变量?

我是否遗漏了与 PHP 魔术常量相关的任何其他安全注意事项?

就上下文而言,这是关于服务于静态 PHP 页面的 Apache 服务器,站点上没有额外的用户输入(例如:表单、文件上传、cookie 等)。

0 投票
1 回答
52 浏览

php - 如何在 php 中定义常量并在不包括常量文件的情况下从所有文件中访问它(任何类似 .Net 中的 AppSettings 的东西)

我想定义一些常量并从任何文件访问这些常量,而不在 php.ini 中包含任何文件。

换句话说,我在 C# 中搜索任何等效的 Web.Config->AppSettings

0 投票
1 回答
60 浏览

php - 来自被调用文件的魔术常数 - 不是动作文件

我在课堂上有这个功能:

这是在 foo.php 文件中。然后我有一个 bar.php 文件,我在其中调用并初始化类以使用此函数:

我的问题是,这将输出(在日志文件中):

目录:/var/www/dir
文件:/var/www/dir/foo.php
方法:Logger::logMagic
功能:logMagic 名称空间

类:Logger

我的预期输出是它会返回

目录:/var/www/dir
文件:/var/www/dir/bar.php
方法:
功能:
命名空间:
类:

阅读文档确实向我澄清了这一点,这是正常的。

有什么方法可以在 filea.php 中使用来自 fileb.php 的魔术常量,而不将参数传递给函数?

0 投票
1 回答
39 浏览

php - 使用魔术常量访问对象属性

我即将从控制器对象中加载一个语言对象作为属性,如下所示:

在我的控制器对象的方法中,我目前正在访问这样的特定翻译:

但我想要这样的东西使它“更精简”的代码:

有人知道如何正确使用对象表示法中的魔术常数吗?不幸的是,我在这里或官方 php.net 网站上没有找到任何答案

0 投票
1 回答
188 浏览

php - 可以在PHP中导入魔术常量吗

我找不到任何关于我无法导入任何魔法常数这一事实的提示。

试图喜欢...

... 导致

这个问题很重要,而 PHPStorm 倾向于自动导入魔术常量。如果不可能,则需要报告和修复。


编辑 (2019-07-25)

我打开一个问题后,这将在 PHPStorm 2019.3 中得到修复。

0 投票
1 回答
63 浏览

php - PHP魔术常量 - 自动传递给函数?

我编写了一个简单的访问控制系统,它读取访问字符串数组,并根据结果返回真或假。

我会这样称呼它(例如在list_user_data类的方法中User):`

并在其中检查当前用户是否有权访问list_user_dataclass中的方法User

它可以工作,但我发现我总是必须在通话中指定__CLASS__和指定,这很烦人。__METHOD__有没有办法调用函数的current_user_can函数中获取这些值,以便我可以简单地调用而不必传递魔术常量?current_user_can()

我的代码按原样工作,但我认为它可以改进。

这可能吗?

0 投票
2 回答
81 浏览

php - 如何获取调用函数的脚本名称?

我想为日志编写一个非常通用的函数:

我将在我的代码中几乎所有地方都使用它,这些代码将在几个 php 脚本中分派include。如此处所示,无论在何处调用该函数,__FILE__都始终使用主脚本文件名进行赋值。

有没有一种方法可以在函数本身中获取调用者脚本的名称,而无需将其作为参数传递?

EDIT1 - 它不是重复的

尽管目的是检索来电者信息,就像其他一些问题一样,解决方案是相同的。知道答案就很明显它们是相互关联的。我的问题有另一个“范围”。它与包含和脚本文件名检索相关,而不是未知上下文中的函数名。

EDIT2 - 答案

是的,debug_backtrace()功能就是答案。

这是我正在寻找的解决方案:

0 投票
1 回答
83 浏览

php - php中有没有办法计算嵌套结构级别?

我正在尝试一种使用 PHP 更轻松地调试 Cronjob 脚本的方法。无需在服务器上访问 xdebug 等。

为此,我想获取代码输入的嵌套结构的数量。我将在代码中将其称为NESTING

据我所知,至少有两种方法以某种方式使用嵌套级别。

打破$n; 逃脱 $n 嵌套。goto 不允许进入更深的。

背景:

这应该适用于 PHP > 5.3 + 7 到目前为止,我尝试用谷歌搜索最接近主题的是:

代码示例:

到目前为止的调试器想法:

argv[1]='somefile.php;'

因此可以执行脚本、跳过调试行、跳过循环、返回一行、使用特殊值测试脚本行为、打印变量等。

PS:我没有测试代码是否有错误,所以它可能无法运行它来解释这个想法和我需要什么

为了。

编辑1:预期输出:

感谢任何指点,干杯

PS.:感谢橡皮鸭调试。注意到我只需要将 $next_line 设置为循环之后。仍然如果有人知道如何获得如此嵌套级别会很高兴知道

0 投票
0 回答
48 浏览

php - PHP 中是否有像 __DIR__ 这样的魔术常数,但符号链接未解析?

一切都在标题中。

我正在尝试用 php 编写具有客户端和服务器功能的应用程序。出于测试目的(至少),我需要几个客户。为了不必复制书面代码,我想使用符号链接。像这样:我的主要“存储库”是MyClient/scripts 我在MyClient一个MyClient2文件夹附近创建的,我在该文件夹中创建了一个符号链接,以便能够使用MyClientfor 的所有脚本MyClient2

在我的脚本的真正开始,我可以const 使用__DIR__. 我找到了很多解决方法来从变量中获取我正在寻找的值(例如:),$_SERVER['PWD']但这不允许我定义一个const.

所以我正在寻找一个常量,就像__DIR__但未解析的符号链接一样。

这给出了解析符号链接的结果(不是我想要的)

这会引发致命错误(不是我想要的)

编辑 这不是这个问题的重复。我的问题根本不涉及define,而链接的问题则明确询问它是如何工作的。因为我的问题define已被建议作为一种解决方法,足以满足我的需要。

0 投票
1 回答
74 浏览

php - PHP - 可以在所需脚本中获取所需脚本的魔术常量 __FILE__ 吗?

是否可以在所需文件中获取要求程序脚本(需要另一个文件)的魔术常量 __FILE__?

例如:

需求者.php

必需的.php

注意:它们不在同一个文件夹中,问题是关于该功能的可能性,而无需在要求文件中创建常量。


关于@MarkusZeller 评论:

这个建议很好,但是在需要程序文件中具有绝对路径常量或使用相对路径之间进行选择,我更喜欢第一个选项。