ThinkPHP aucune opération, traitement du contrôleur vide

高洛峰
Libérer: 2023-03-05 15:52:02
original
1488 Les gens l'ont consulté

Lorsqu'un expert parcourt votre site Web, le message d'erreur de votre site Web fournira aux pirates informatiques des informations pour attaquer votre site Web. Par exemple, pour les opérations vides et les contrôleurs vides, vous exposerez le framework utilisé par le backend de votre site Web aux pirates, et les pirates attaqueront votre site Web en fonction des vulnérabilités du framework. Par conséquent, nous devons gérer les contrôleurs et les opérations vides sans laisser d’indices aux pirates.

1. Traitement sans opération

Tout d'abord, jetez un œil à l'effet :
Pour moi, je n'ai pas de méthode hello dans la classe IndexController. Fichier .php. Si j'essaie Lors de l'accès à cette méthode, les informations suivantes seront signalées :
Remarque : L'essence d'un no-op : un objet (contrôleur) appelle une méthode qui n'existe pas

ThinkPHP空操作、空控制器处理


Pour les développeurs qui comprennent ThinkPHP, il est facile de voir que le backend de ce site Web utilise le framework ThinkPHP. Alors, comment bloquer ces problèmes ? C'est de cela dont nous allons parler aujourd'hui.

Solution 1, ajoutez une méthode __call($method,$argvs) dans le contrôleur

ThinkPHP空操作、空控制器处理

ThinkPHP空操作、空控制器处理
De cette façon, lorsque vous accédez à nouveau à la méthode hello, la méthode __call($method,$args) du contrôleur sera appelée par défaut.

Mais ! Lorsque nous avons plusieurs contrôleurs, dois-je écrire une méthode __call($method,$args) pour chaque contrôleur ? Évidemment déraisonnable ! Par conséquent, nous devons écrire cette méthode dans la classe parent du contrôleur, simplement par héritage. Lorsque nous entrons dans Controller.class.php, nous pouvons trouver la méthode __call(), car TP l'a déjà fait pour nous. Dans son esprit, cela dépend si nous avons défini une méthode appelée _empty() dans le contrôleur. Si défini, appelez cette méthode

Emplacement de la classe parent du contrôleur commun : ThinkPHP/Library/Think/Controller.class.php

Solution 2

Créez un modèle avec le même nom pour le nom de l'opération sans opération, et le système appellera automatiquement le modèle.

2. Traitement du contrôleur vide

ThinkPHP空操作、空控制器处理
Comme il n'y a pas de fichier BeijingController.class.php, une erreur est signalée ! !
Après avoir analysé le code source du framework TP, nous avons la solution suivante

ThinkPHP空操作、空控制器处理

Nous devons donc définir un contrôleur vide. Lorsque nous accédons à un contrôleur qui n'existe pas, une erreur nous sera signalée selon l'erreur que nous avons spécifiée.

ThinkPHP空操作、空控制器处理

ThinkPHP空操作、空控制器处理

Bon, arrêtons de parler d'opérations vides et de contrôleurs vides O(∩_∩)O~~

Lorsqu'un expert parcourt votre site Web, le message d'erreur sur votre site Web fournira aux pirates informatiques des informations pour attaquer votre site Web. Par exemple, pour les opérations vides et les contrôleurs vides, vous exposerez le framework utilisé par le backend de votre site Web aux pirates, et les pirates attaqueront votre site Web en fonction des vulnérabilités du framework. Par conséquent, nous devons gérer les contrôleurs et les opérations vides sans laisser d’indices aux pirates.

1. Traitement sans opération

Regardez d'abord l'effet :
Pour moi, je n'ai pas de bonjour dans le fichier IndexController. méthode class.php, si j'essaie d'accéder à cette méthode, les informations suivantes seront rapportées :
Remarque : L'essence d'un no-op : un objet (contrôleur) appelle une méthode qui n'existe pas

ThinkPHP空操作、空控制器处理


Pour les développeurs qui connaissent ThinkPHP, il est facile de voir que le backend de ce site Web utilise le framework ThinkPHP. Alors, comment bloquer ces problèmes ? C'est de cela dont nous allons parler aujourd'hui.

Solution 1, ajoutez une méthode __call($method,$argvs) dans le contrôleur

ThinkPHP空操作、空控制器处理

ThinkPHP空操作、空控制器处理
De cette façon, lorsque vous accédez au La méthode hello appellera à nouveau la méthode __call($method,$args) du contrôleur par défaut.

Mais ! Lorsque nous avons plusieurs contrôleurs, dois-je écrire une méthode __call($method,$args) pour chaque contrôleur ? Évidemment déraisonnable ! Par conséquent, nous devons écrire cette méthode dans la classe parent du contrôleur, simplement par héritage. Lorsque nous entrons dans Controller.class.php, nous pouvons trouver la méthode __call(), car TP l'a déjà fait pour nous. Dans son esprit, cela dépend si nous avons défini une méthode appelée _empty() dans le contrôleur. Si défini, appelez cette méthode

Emplacement de la classe parent du contrôleur commun : ThinkPHP/Library/Think/Controller.class.php

Solution 2

Créez un modèle avec le même nom pour le nom de l'opération sans opération, et le système appellera automatiquement le modèle.

2. Traitement du contrôleur vide

ThinkPHP空操作、空控制器处理
Comme il n'y a pas de fichier BeijingController.class.php, une erreur est signalée ! !
Après avoir analysé le code source du framework TP, nous avons la solution suivante

ThinkPHP空操作、空控制器处理

Nous devons donc définir un contrôleur vide. Lorsque nous accédons à un contrôleur qui n'existe pas, une erreur nous sera signalée selon l'erreur que nous avons spécifiée.

ThinkPHP空操作、空控制器处理

ThinkPHP空操作、空控制器处理

Pour plus d'articles sur les opérations vides ThinkPHP et le traitement des contrôleurs vides, veuillez faire attention au site Web PHP chinois !

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!