php - 安全风险? $_REQUEST 变量 ... $$ 在本地堆栈上

标签 php security variables request global

我早些时候与我的一位程序员交谈,他向我展示了他正在考虑的一段代码:

foreach($_REQUEST as $var=>$val) {
    $$var = addslashes($val);
}

他希望能够使用 $varName 而不必编写 $_REQUEST['varName']

我建议他使用 mysql_real_escape_string 而不是 addSlashes 并且不要将 $_REQUEST 变量放入本地堆栈,因为这会给黑客带来麻烦附加向量。对我来说,这似乎与旧的 REGISTER_GLOBALS 指令存在同样的问题。

他说不存在相同的安全风险,因为这些变量都是在本地堆栈上创建的。所以我不确定,我查看了 PHP 变量变量页面:http://www.php.net/manual/en/language.variables.variable.php但除了警告框之外,没有看到任何有关 super 全局变量和安全性的内容。

黑客可以轻松利用该构造吗?

最佳答案

这就像倒退 6 年的 PHP 安全增强...基本上,register_globalsmagic_quotes 放在一起!这两个在 PHP 的最新版本中已被标记为已弃用,并且出于充分的理由将从 future 版本中删除。

想象一下以下代码:

if ($is_admin) {
    do_administrative_task();
}

现在有人提出以下请求:

http://www.example.com/script.php?is_admin=1

就这样,你就是管理员了!

同样,addslashes() 并没有真正提供任何针对 SQL 注入(inject)攻击的保护,因为它不理解现代字符集。制作绕过 addslashes() 并破解您的数据库的东西非常容易。

关于php - 安全风险? $_REQUEST 变量 ... $$ 在本地堆栈上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3983933/

相关文章:

带有 Java 7 update 51 的 Java Web Start 安全对话框

javascript - 网站刚刚被攻击,头部被注入(inject)了javascript,这是什么意思?

php - PDO 准备在单个查询中插入多行

php - 高性能MySQL随机非连续行

java - 使用PBKDF2 java解密和加密

bash - 修改 awk 代码块内的 shell 变量

javascript - Jquery - 在特定的 div 中选择一个 span 的内容

python - 从函数返回后如何在 Python 中打印原始变量的名称?

PHPStorm 缺少返回语句

php - 如何从 wp 主题 wp_dequeue_script 或 wp_deregister_script jquery (不受影响)文件