我正在尝试跟踪某些遗留代码中的执行流程。我们正在使用
访问报告http://site.com/?nq=showreport&action=view
这就是谜题:
index.php
中$_GET['nq']
或$_GET['action']
(并且没有
$_REQUEST
或者),index.php
或其中包含的任何来源均不包含showreport.php
,.htaccess
中没有网址重写然而,showreport.php
被执行了。
我可以在服务器上访问cPanel(但没有apache配置文件),这是实时代码我无法自由使用。
有什么可以让这种情况发生?我应该在哪里看?
更新
有趣的是 - 在状态更新中向客户端发送了这个问题的链接,以使他保持在循环中;几分钟后,所有访问权被撤销,客户通知我项目被取消。我相信我已经采取了足够的谨慎措施,不要在代码实际存在的地方留下任何痕迹......
我感到宽慰现在这已经取消了,但我也很想知道是什么!
感谢大家的时间和帮助。
答案 0 :(得分:6)
解析URL有“数百种”方法 - 在各种层(系统,httpd服务器,CGI脚本)中。因此,不可能专门用您提供的信息回答您的问题。
你留下了一个非常明显的提示“遗留代码”。我假设你的意思是,你不想完全阅读代码,理解它甚至可以找到正在解析该参数的应用程序部分。
如果您留下一些提示“代码的遗产”,那将是很好的:年龄,PHP版本的目标等。这可以帮助。
并不总是$_GET
用于访问这些值({em>相同的对于$_REQUEST
是正确的,它们是堂兄弟。)
我们来看看PHP 3 manual Mirror:
<强> HTTP_GET_VARS 强>
通过HTTP GET方法传递给当前脚本的关联变量数组。
脚本是否正在使用此数组?这只是一个猜测,这是一个有效的方法来访问这些参数很长一段时间。
无论如何,这绝不是你搜索的内容。在PHP中,这经常被误解和误用(字面上被滥用)称为register globals PHP Manual。所以你可能只是在搜索$nq
。
接下来,总是有请求uri和apache / environment / cgi变量。请参阅上面的PHP 3手册链接,其中列出了许多内容。将其与当前手册进行比较,以获得广泛的理解。
在任何情况下,您都可以使用grep
或多文件搜索(如果您需要检查某些IDE中的遗留代码,Eclipse在其中有一个很好的版本。)
因此,在一天结束时,您可能只会查找nq
,'nq'
,"nq"
或$nq
这样的字符串。然后检查这个搜索带来了什么。基于字符串的搜索是一个很好的进入你根本不知道的代码库。
答案 1 :(得分:1)
我会安装xdebug并使用其function trace逐一查看它正在做什么。
编辑:
好吧,只是一个想法,但是......也许你的应用程序是某种包含地狱般的应用程序我有时被迫在工作中混乱?一个文件包含另一个文件,它包含另一个文件,并且再次包含原始文件...所以也许您的索引文件包含一些文件,最终导致该文件被包含在内?
另一个编辑:
或者,有时应用程序开发人员不知道什么是$ _GET变量并且自己解析了网址 - &gt;做手册包括基于网址。
答案 2 :(得分:1)
检查你的crontab,[抱歉我不知道你会在cpanel中找到它] - 脚本是在特定时间触发,还是只有当您请求特定页面时才能看到它?
-Sean
修改强> 如果crontab已经出来,请查看index.php [并且它包含]并查找代码,这些代码循环遍历url参数,而没有特别注意“nq”以及可能正在解析查询字符串的任何内容[可能类似于:$ _SERVER ['QUERY_STRING']]
-Sean
答案 3 :(得分:1)
我不知道它是如何工作的,但我知道Wordpress / Silverstipe正在使用自己的url-rewriting来解析url来查找帖子/标签/等。所以url解析可能是在PHP脚本中完成的。
答案 4 :(得分:1)
检查您的配置文件(php.ini和.htaccess),您可能已设置auto_prepend_file
。
答案 5 :(得分:1)
你应该给debug_backtrace()
(或debug_print_backtrace()
一次尝试。输出类似于Exception-stacktrace的输出,因此它应该帮助你找出,什么时候和从哪里调用如果您无法在本地开发系统上运行该应用程序,请确保没有其他人可以看到输出
答案 6 :(得分:0)
您确定要查看正确的配置或服务器吗?如果你去上面的url,你会得到一个错误页面,似乎表明服务器实际上是一个微软的iis服务器,而不是一个apache服务器。