문제

다음 코드를 사용하세요.

<?php
if (isset($_POST['action']) && !empty($_POST['action'])) {
    $action = $_POST['action'];
}

if ($action) {
    echo $action;
}
else { 
    echo 'No variable';
}
?>

그런 다음? action = test를 사용하여 파일에 액세스하십시오 $ 액션이 Get에 의해 자동으로 선언되는 것을 방지하는 방법이 있습니까?물론 추가하는 것 외에

&& !isset($_GET['action'])

변수가 나를 위해 선언되기를 원하는 이유는 무엇입니까?

도움이 되었습니까?

해결책

php.ini를 확인하여 register_globals 환경.아마도 켜져 있을 것입니다. 끄고 싶을 수도 있습니다.

변수가 나를 위해 선언되기를 원하는 이유는 무엇입니까?

당신은 그렇지 않습니다. 이는 끔찍한 보안 위험입니다.환경, GET, POST, 쿠키 및 서버 변수를 전역으로 만듭니다. (PHP 매뉴얼).이것들은 소수입니다 예약된 변수 PHP에서.

다른 팁

처럼 보인다 register_globals php.ini에 범인이 있습니다.이 기능을 꺼야 합니다.또한 그것을 착용하는 것은 큰 보안 위험입니다.

공유 호스팅을 사용 중이고 php.ini를 수정할 수 없는 경우 다음을 사용할 수 있습니다. ini_set() Register_globals를 끄려면.

귀하의 질문을 이해하고 있다면 Register_globals를 off로 설정하십시오.보다 http://us2.php.net/manual/en/언어.variables.predefine.php

액세스할 수 없는 경우 php.ini, ㅏ ini_set('register_globals', false) PHP 스크립트에서는 작동하지 않습니다 (변수는 이미 선언 됨) .htaccess는 다음과 같습니다:

php_flag register_globals Off

때로는 도움이 될 수 있습니다.

PHP.INI에서 PHP 로그 수준을 다음으로 설정하여 모든 변수가 올바르게 선언되었는지 테스트할 수 있습니다.

error_reporting  =  E_ALL 

이제 코드 조각이 NOTICE를 생성해야 합니다.

PHP 역사상 어느 시점에서 그들은 큰 보안 위험이 있기 때문에 기본적으로 Register_globals를 끄기로 논란의 여지가 있는 결정을 내렸습니다.이는 누구에게나 코드에 변수를 삽입하여 상상할 수 없는 결과를 초래할 가능성을 제공합니다!이 "기능"은 php6에서도 제거되었습니다.

켜져 있는 것으로 확인되면 관리자에게 문의하여 끄세요.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top