댓글 검색 목록

[php] PHP 8 : disable_functions INI 지시문으로 내부 함수 재정의

페이지 정보

작성자 운영자 작성일 20-07-12 10:58 조회 831 댓글 0

PHP에서는 php.ini 지시문으로 특정 함수와 클래스를 비활성화 할 수 있습니다.

  • disable_functions : PHP에서 사용할 수 없는 쉼표로 구분 된 함수 이름 목록.
  • disable_classes : 함수와 유사하게 사용할 수 있는 클래스 목록입니다.


이 지시문은 악의적인 행위자가 서버에서 코드 실행 액세스를 얻는 경우에도 잠재적으로 안전하지 않은 기능이 사용되지 않도록 하는 데 주로 사용되었습니다.


PHP 8에서 비활성화 된 함수는 함수 테이블에 포함되어 있지 않습니다. 즉, function_exists() 호출은 비활성화 된 함수에 대해 false를 반환하며, 가장 중요한 것은 비활성화 된 함수를 재정의 할 수 있다는 의미입니다.


https://php.watch/articles/php8-override-internal-functions 


 


다음은 사용자 랜드 구현으로 sleep() 함수를 재정의 하는 예입니다.


1. 새로운 기능 정의 작성 


함수를 비활성화 하면 테스트중인 코드의 어느 곳에서나 함수를 사용할 수 없습니다. 테스트 프레임 워크 자체에서 사용하는 특정 기능 (예 : 테스트 실행 시간을 계산하는 데 자주 사용되는 microtime())을 재정의 하는 경우 해당 기능을 중단하지 않도록 주의해야 합니다.


// test.php
function sleep() {
    return;
}

\sleep(1662815);

test.php 파일에서 실제로 실행을 유지하지 않고 sleep() 함수를 즉시 반환하도록 재정의 합니다.


우리는 정규화 된 함수 이름을 어떻게 사용했는지 주목하고 작동합니다.


2. disable_functions INI 지시문으로 스크립트를 실행하십시오. 


php -d disable_functions=sleep test.php

코드를 실행하면 PHP는 먼저 내부 절전 기능을 비활성화하고 PHP 8 변경으로 인해 사용자 정의 test.php 파일은 새로운 절전 기능을 정의 할 수 있습니다.



댓글목록 0

등록된 댓글이 없습니다.

웹학교 로고

온라인 코딩학교

코리아뉴스 2001 - , All right reserved.