J'essaie de tracer le flux d'exécution dans un code hérité. Nous avons un rapport d'accès avec ceci est le puzzle: p> Cependant, J'ai accès à cPanel (mais aucun fichier de configuration Apache) sur le serveur et c'est un code en direct, je ne peux prendre aucune liberté avec. p> Qu'est-ce qui pourrait faire cela arriver? Où devrais-je regarder? P> Mise à jour forte> Je suis soulagé que cela m'a été retiré maintenant, mais je suis aussi démangeaisons de savoir ce qu'il Était em>! p> Merci tout le monde pour votre temps et votre aide. P> P>
index.php code> Il n'y a pas
$ _ get ['nq'] code> ou
$ € _ obtenir ['action'] code> (et non
$ _ demande code> soit), LI>
index.php code> ou toutes les sources qu'il inclut, n'incluent pas
showreport.php code>, li>
.htaccess code> Il n'y a pas d'URL-réécriture li>
ul>
showreport.php code> est exécuté. P>
Thing drôle - Envoyé le client un lien vers cette question dans une mise à jour de statut pour le garder dans la boucle; Minutes Ce dernier, tous les accès ont été révoqués et que le client m'a informé que le projet est annulé. Je crois que j'ai pris assez de soin de ne laisser aucune trace à l'endroit où le code est ... p>
7 Réponses :
J'installerais xdebug et utilisez son Trace de fonction pour regarder la pièce par pièce ce qu'elle fait. p>
EDIT: P>
D'accord, juste une idée, mais ... peut-être que votre application est peut-être une sorte d'enfer comme une application, je suis parfois forcée de gâcher au travail? Un fichier inclut un autre, il inclut un autre et qui inclut un fichier original à nouveau ... Donc, peut-être que votre fichier d'index inclut un fichier qui éventuellement amener ce fichier à être inclus? P>
Une autre modification: p>
ou, parfois des devs d'application ne savaient pas quelle est une variable de $ _GET et analysé les URL elles-mêmes -> Faire du manuel inclut basé sur les URL basées. P>
Ce n'est pas une option ici. Il s'agit d'un site STATS en direct recevant 100+ hits par seconde et ne peut pas être joué avec strictement interdit par le client.
Vous ne pouvez pas l'exécuter dans l'environnement de développement? Seule une autre option que je peux penser est manuellement le déboguer manuellement, mais c'est hors de question alors aussi.
En dernier recours, je pourrais avoir à devoir. Mais s'il y a est i> quelque chose à l'extérieur des répertoires accessibles à moi, c'est derrière le comportement, alors ma configuration de développement ne fonctionnerait pas.
@Majid Fouladpour: Quels outils avez-vous à portée de main? Accès Shell? Est-ce que c'est certains Linux, il fonctionne?
Êtes-vous sûr de regarder la bonne configuration ou le bon serveur? Si vous allez l'URL au-dessus de vous obtenez une page d'erreur qui semble indiquer que le serveur est en réalité un serveur Microsoft IIS et non un Apache One. P>
J'ai changé l'URL dans la question. Ceci est une fonctionnalité d'administration, pas une URL publique que je peux partager.
lol, mon mauvais. J'aurais dû faire plus attention à ce que l'URL était réellement.
;) Cela ne fait pas mal de vérifier aussi des erreurs très évidentes, s'est-elle eue dans le passé.
Je ne sais pas pourquoi cela a été évité, ces erreurs, quelle que soit sa bêtise, et qu'il n'y a pas de mal à la vérification / pointage.
vérifier votre crontab, [désolé je ne sais pas où vous le trouveriez dans cpanel] - Le script incendie-t-il à une heure spécifique ou pouvez-vous le voir déclencher uniquement lorsque vous demandez une page spécifique? P>
-Sean p>
EDIT: strong>
Si Crontab est sorti, jetez un coup d'œil à index.php [et il comprend] et recherchez un code qui bouclent sur les paramètres de l'URL sans noter spécifiquement «NQ» et tout ce qui pourrait être analysé la chaîne de requête [probablement quelque chose comme: $ _Server ['Query_string']]] P>
-Sean p>
Comment un travail cron pourrait-il causer ma demande en direct d'être acheminé vers un fichier qui n'est pas inclus? Ne peut voir aucune possibilité de cela.
C'est pourquoi je vous demandais comment vous savez que le script était exécuté - votre question ne dit pas réellement.
Merci Sean et désolé si je n'étais pas clair à ce sujet. Mais peut-on accéder aux travaux de cron avec une chaîne de requête?
Je vais vérifier pour $ _ serveur ['Query_string'] code>, merci pour le conseil.
Salut Majid - Pas de problème, et aucun travail Craon ne peut être exécuté par autre que le démon cron [au meilleur de ma connaissance] mais vous pouvez certainement utiliser une chaîne de requête dans une tâche cron [ou tout fichier qu'il arrive à Exécuter] c'est-à-dire cette ligne dans un crontab: wget - q " domaine. tld / public / index.php? path_info = quotidien & code = iofzz "> / dev / null 2> & 1
Je ne sais pas comment cela fonctionne, mais je sais que WordPress / SilverStetipe utilise est la propre url-réécrire à l'URL d'analyse pour trouver des messages / des étiquettes / etc. Donc, l'URL analyse peut-être dans un script PHP. P>
Vérifiez vos fichiers de configuration (php.ini et .htaccess), vous pouvez avoir auto_prepend_file code>
ensemble. p>
+1 Bon point, je ne savais pas sur ces directives, mais il suffit de vérifier et il n'a aucune valeur (Althou non commenté non plus: auto_prepend_file = code>
auto_append_file = code>
Il existe des façons de "centaines" d'analyser une URL - dans diverses couches (système, serveur httpd, script CGI). Il n'est donc pas possible de répondre spécifiquement à votre question avec les informations que vous avez fournies. P>
Vous laissez un indice assez distinct "code hérité". Je suppose que ce que vous voulez dire, c'est que vous ne voulez pas lire complètement le code, le comprendre même pour localiser le morceau de l'application en question qui analyse ce paramètre. P>
Ce serait bien cependant si vous laissez des astuces "comment legacy" que le code est: âge, version PHP ciblée, etc. Cela peut aider. P>
Ce n'était pas toujours que Jetons un coup d'oeil dans le Manuel PHP 3 http_get_vars strong> p>
Un tableau associatif de variables passe sur le script actuel via la méthode HTTP GET. p>
blockQuote>
est le script à utiliser ce tableau probablement? C'est juste une supposition, c'était une méthode valide pour accéder à ces paramètres pendant un certain temps. P>
Quoi qu'il en soit, cela ne doit pas être ce que vous recherchez. Il y avait cette fonctionnalité souvent mal comprise et mal utilisée (littéralement maltraité) appelée registre globals < / em> manuel PHP fort> sup> dans php. Donc, vous pouvez simplement rechercher À côté de cela, il y a toujours les variables de la requête URI et Apache / Environment / CGI. Voir le lien vers le manuel PHP 3 au-dessus de celui-ci énumère de nombreux. Comparez cela avec le manuel actuel pour obtenir une meilleure compréhension. P>
Dans tous les cas, vous pourriez avoir Donc, à la fin de la journée, vous pourriez simplement rechercher une chaîne comme $ _ get code> a été utilisé pour accéder à ces valeurs ( même em> est vrai pour
$ _ demande code>, ce sont des cousins). p>
$ nq code>. P>
grep code> ou une recherche multi-fichiers disponible (Eclipse a une belle construction en une si vous devez inspecter le code hérité à l'intérieur de l'IDE). P>
nq code>,
'nq' code>,
"nq" code> ou < Code> $ NQ code>. Ensuite, vérifiez ce que cette recherche apporte. La recherche à la chaîne est une bonne entrée dans une base de code que vous ne connaissez pas du tout. P>
@HARKE (et +1): L'application est l'une de ces applications de suivi frappées mal écrites en premier lieu et non prises en charge après la vente fermée. Cet être utilisé depuis un certain temps a subi plusieurs Ajout de code> par des codeurs passés inconnus de moi. Il a
register_globals = on code>, et j'ai donc recherché toutes les combinaisons de méthodes produisant la lecture et l'inclusion de fichiers variable. Vous avez raison, je n'ai pas examiné chaque source, mais j'ai examiné l'index.php et tout ce qui est inclus ligne par ligne. Il y a no i> trace de n'importe quelle méthode provoquant une invocation de
showreport.php code>.
Vous devez d'abord trouver où le paramètre est analysé. Et puis vous devez regarder dans tous les endroits que la variable est traitée (ouais, certains travaux, mais vous ne le ferez pas si ce n'est pas évident). Comprend peut être fait par variable. Vous pouvez essayer i> pour localiser showReport code> comme chaîne.
Inclure code> S peut être une expression alors en fonction de variables aussi et - Code hérité
* Twinker * code> - Recherche par
EVAL code>. Je pense que vous avez l'idée;).
Grep code> Votre ami est votre ami. Si vous travaillez sur Shell distant
Grep --Help | Moins code> Offres de recherche.
Il n'y a plus de chance de trouver à coup sûr la cause de la cause. Mais je marque ceci comme réponse acceptée que cela indique une variété d'endroits à regarder.
Vous devriez donner débog_backtrace () code>
(ou débog_print_backtrace () code> a essayez. La sortie est similaire à la sortie d'une exception-stacktrace, Ainsi, cela devrait vous aider à trouver, ce qu'on appelle quand et d'où. Si vous n'avez pas la possibilité d'exécuter l'application sur un système de développement local, assurez-vous que personne d'autre ne peut voir la sortie p>
Apache Access Log peut capable de vous dire plus
@Mike B Il n'y a pas de journaux d'accès, il existe un
Access_logs code> vide.
http://site.com/nq=showreport&action=view code> - Ceci est ou ne manque pas un
? code>?
@hakre, corrigé. Merci de pointer. L'URL réelle a
? Code> cependant. ... toujours d'avoir nulle part
Essayé
débog_backtrace () code> dans
showreport.php code>?
@KingCrunch - Ce serait plus facile que de mettre en place un miroir de devir. Je vais essayer cela - vous pouvez envisager de la mettre comme une réponse. Ma déclaration à propos de cet étant une fonctionnalité d'administration n'est pas exacte, cela est en fait une fonctionnalité de zone client, et de faire la trace uniquement visible pour moi, j'utiliserais une adresse IP conditionnelle ou basée sur la cookie. Merci.
Vous pouvez également utiliser Xdebug par demande, si c'est une option.
Tant que Xdebug est activé (mais les traces de configuration et telles ne sont pas activées!), Vous pouvez l'activer avec des fonctions PHP pour vos propres demandes. J'utilise un type de débogage similaire pour notre environnement de production qui a juste été lâché; Lorsque l'erreur PHP arrive, je peux obtenir de meilleures erreurs l'enregistreur de cette façon. vide xdebug_start_trace (string trace_file [ options d'entier]) dans xdebug.org/docs/execution_trace