【问题标题】:Risks of using PHP eval for string math使用 PHP eval 进行字符串数学运算的风险
【发布时间】:2015-02-18 15:15:07
【问题描述】:

我对@9​​87654321@ 安全风险有疑问

这是我自己的代码

<?php

$str = 'nabi<'.$_GET['hackme']; // $_GET['hackme']=2;

$str = str_replace("nabi", 1, $str);

$hmm = eval('return ('.$str.');');

if($hmm){
    echo 'yeah';
}
else{
    echo 'no';
}

结果将是:

yeah

我的代码运行良好

这就是我想要的!

但是我害怕安全风险!

请提供新的解决方案

【问题讨论】:

  • 为什么字符串中有条件? XY 问题?
  • @Nabi 为什么必须是字符串?这似乎是 XY 问题
  • 是的,这太愚蠢了......因为我有一个 $_POST['hackme']​​
  • 牢记以下引用:如果eval() 是答案,那么您几乎肯定是问错了问题。 -- Rasmus Lerdorf,PHP 的 BDFL
  • 永远不要使用 eval。 永远。

标签: php eval


【解决方案1】:

如果您所做的只是检查某个值是否小于 1,请将 $_GET['hackme'] 类型转换为 int 或 double。

$str = 'nabi<' . (int) $_GET['hackme'];

【讨论】:

    【解决方案2】:

    安全性为零...传递给hackme的每个代码都将被执行。

    【讨论】:

    • 您还有其他解决方案吗?
    • 如果你只是想检查给定的数字是否大于 1(我猜你在做什么)只需$larger = 1 &lt; $_GET['hackme']
    • 嗨,可以吗? implode(' &amp;&amp; ', $larger); 或这样的代码请
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-23
    相关资源
    最近更新 更多