문제
다음 코드를 사용하세요.
<?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에서도 제거되었습니다.
켜져 있는 것으로 확인되면 관리자에게 문의하여 끄세요.