ThinkPHP가 작동하지 않음, 빈 컨트롤러 처리

高洛峰
풀어 주다: 2023-03-05 15:52:02
원래의
1504명이 탐색했습니다.

전문가가 웹사이트를 탐색할 때 웹사이트의 오류 메시지를 통해 해커가 웹사이트를 공격할 수 있는 정보를 제공하게 됩니다. 예를 들어 빈 작업과 빈 컨트롤러의 경우 웹 사이트 백엔드에서 사용하는 프레임워크가 해커에게 노출되고 해커는 프레임워크의 취약점을 기반으로 웹 사이트를 공격할 것입니다. 따라서 해커에게 어떠한 단서도 남기지 않고 빈 컨트롤러와 빈 작업을 처리해야 합니다.

1. 무연산 처리

우선 효과를 살펴보겠습니다.
저는 IndexController에 hello 메소드가 없습니다. .class.php 파일입니다. 이 메서드에 액세스하려고 하면 다음 정보가 보고됩니다.
참고: 무작동의 본질: 개체(컨트롤러)가 존재하지 않는 메서드를 호출합니다.

ThinkPHP空操作、空控制器处理


ThinkPHP를 아는 개발자라면 이 웹사이트의 백엔드가 ThinkPHP 프레임워크를 사용하고 있다는 것을 쉽게 알 수 있습니다. 그렇다면 이러한 문제를 어떻게 차단할 수 있을까요? 그것이 오늘 우리가 이야기할 내용입니다.

해결책 1, 컨트롤러에 __call($method,$argvs) 메소드를 추가하세요.

ThinkPHP空操作、空控制器处理

ThinkPHP空操作、空控制器处理
이렇게 하면 hello 메소드에 다시 액세스하면 컨트롤러의 __call($method,$args) 메소드가 기본적으로 호출됩니다.

하지만! 컨트롤러가 많은 경우 각 컨트롤러에 대해 __call($method,$args) 메서드를 작성해야 합니까? 분명히 불합리합니다! 따라서 상속을 통해 컨트롤러의 상위 클래스에 이 메서드를 작성해야 합니다. Controller.class.php에 들어가면 __call() 메소드를 찾을 수 있습니다. 왜냐하면 TP가 이미 이를 수행했기 때문입니다. 그의 생각으로는 컨트롤러에 _empty()라는 메소드를 정의했는지 여부에 달려 있습니다. 정의된 경우 이 메소드를 호출하세요

공통 컨트롤러 상위 클래스의 위치: ThinkPHP/Library/Think/Controller.class.php

해결책 2

무작동 작업 이름과 동일한 이름으로 템플릿을 생성하면 시스템이 자동으로 템플릿을 호출합니다.

2. 빈 컨트롤러 처리

ThinkPHP空操作、空控制器处理
BeijingController.class.php 파일이 없어서 오류가 발생합니다! !
TP 프레임워크의 소스 코드를 분석한 결과 다음과 같은 해결책이 나왔습니다

ThinkPHP空操作、空控制器处理

따라서 빈 컨트롤러를 정의해야 합니다. 존재하지 않는 컨트롤러에 액세스하면 지정한 오류에 따라 오류가 보고됩니다.

ThinkPHP空操作、空控制器处理

ThinkPHP空操作、空控制器处理

자 빈 연산, 빈 컨트롤러 얘기는 그만하자 O(∩_∩)O~~

전문가가 웹사이트를 탐색할 때 웹사이트의 오류 메시지를 통해 해커가 웹사이트를 공격할 수 있는 정보를 제공하게 됩니다. 예를 들어 빈 작업과 빈 컨트롤러의 경우 웹 사이트 백엔드에서 사용하는 프레임워크가 해커에게 노출되고 해커는 프레임워크의 취약점을 기반으로 웹 사이트를 공격할 것입니다. 따라서 해커에게 어떠한 단서도 남기지 않고 빈 컨트롤러와 빈 작업을 처리해야 합니다.

1. 무연산 처리

효과를 먼저 살펴보세요.
저는 IndexController 파일에 hello가 없습니다. class.php 메소드에 액세스하려고 하면 다음 정보가 보고됩니다.
참고: 무작동의 본질: 객체(컨트롤러)가 존재하지 않는 메소드를 호출합니다.

ThinkPHP空操作、空控制器处理


ThinkPHP를 아는 개발자라면 이 웹사이트의 백엔드가 ThinkPHP 프레임워크를 사용하고 있다는 것을 쉽게 알 수 있습니다. 그렇다면 이러한 문제를 어떻게 차단할 수 있을까요? 그것이 오늘 우리가 이야기할 내용입니다.

해결책 1, 컨트롤러에 __call($method,$argvs) 메소드를 추가하세요.

ThinkPHP空操作、空控制器处理

ThinkPHP空操作、空控制器处理
이렇게 하면 hello 메소드는 기본적으로 컨트롤러의 __call($method,$args) 메소드를 다시 호출합니다.

하지만! 컨트롤러가 많은 경우 각 컨트롤러에 대해 __call($method,$args) 메서드를 작성해야 합니까? 분명히 불합리합니다! 따라서 상속을 통해 컨트롤러의 상위 클래스에 이 메서드를 작성해야 합니다. Controller.class.php에 들어가면 __call() 메소드를 찾을 수 있습니다. 왜냐하면 TP가 이미 이를 수행했기 때문입니다. 그의 생각으로는 컨트롤러에 _empty()라는 메소드를 정의했는지 여부에 달려 있습니다. 정의된 경우 이 메소드를 호출하세요

공통 컨트롤러 상위 클래스의 위치: ThinkPHP/Library/Think/Controller.class.php

해결책 2

무작동 작업 이름과 동일한 이름으로 템플릿을 생성하면 시스템이 자동으로 템플릿을 호출합니다.

2. 빈 컨트롤러 처리

ThinkPHP空操作、空控制器处理
BeijingController.class.php 파일이 없어서 오류가 발생합니다! !
TP 프레임워크의 소스 코드를 분석한 결과 다음과 같은 해결책이 나왔습니다

ThinkPHP空操作、空控制器处理

따라서 빈 컨트롤러를 정의해야 합니다. 존재하지 않는 컨트롤러에 액세스하면 지정한 오류에 따라 오류가 보고됩니다.

ThinkPHP空操作、空控制器处理

ThinkPHP空操作、空控制器处理

더 많은 ThinkPHP 빈 연산 및 빈 컨트롤러 처리 관련 글은 PHP 중국어 홈페이지를 주목해주세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿