采取这个代码:

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

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

然后使用?action =测试访问文件,是否有任何方法可以防止$ action自动声明get?当然除了添加

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

为什么我希望为我声明变量?

有帮助吗?

解决方案

检查你的 php.ini 中的 register_globals 环境。它可能已打开,您希望将其关闭。

为什么我希望为我声明变量?

你不知道。 这是一个可怕的安全风险。它将环境、GET、POST、Cookie 和服务器变量设为全局变量 (PHP 手册). 。这些是少数 保留变量 在 PHP 中。

其他提示

好像 register_globals 在你的 php.ini 中是罪魁祸首。你应该把它关掉。佩戴它也存在巨大的安全风险。

如果您使用共享主机并且无法修改 php.ini,您可以使用 ini_set() 关闭 register_globals 。

如果我理解你的问题,请将 register_globals 设置为关闭。看 http://us2.php.net/manual/en/language.variables.predefined.php

如果您无权访问 php.ini, , A ini_set('register_globals', false) 在php脚本中,无法正常工作(变量已经声明) .htacces与:

php_flag register_globals Off

有时可以提供帮助。

您可以通过将 PHP.INI 中的 PHP 日志级别设置为来测试所有变量是否已正确声明

error_reporting  =  E_ALL 

您的代码片段现在应该生成一个通知。

在 php 历史上的某个时刻,他们做出了一个有争议的决定,默认关闭 register_globals,因为这是一个巨大的安全隐患。它使任何人都有可能在代码中注入变量,造成难以想象的后果!这个“功能”甚至在 php6 中被删除了

如果您发现它已打开,请联系您的管理员将其关闭。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top