如何阻止特定的PHP语句

如何阻止特定的PHP语句,php,file-upload,filesystems,Php,File Upload,Filesystems,听起来很危险,但我希望用户能够在我的网站上创建自己的PHP程序 我有没有办法编写一个代码,这样当用户发布他们的代码时,他们就不会删除或编辑已经存在的文件,可能是使用RegExp 谢谢看看php.ini指令看看php.ini指令,除非你想通过php.ini简单地禁用函数,这会限制你自己的脚本,特别是如果你允许用户上传和管理他们的php文件,那么,对于这种规模的代码,任何一种调节脚本都将是可怕而复杂的。您需要监视所有已创建的文件或操作,并至少取消对尚未创建的文件或操作的任何调用 PHP在解析HTML

听起来很危险,但我希望用户能够在我的网站上创建自己的PHP程序

我有没有办法编写一个代码,这样当用户发布他们的代码时,他们就不会删除或编辑已经存在的文件,可能是使用RegExp


谢谢

看看php.ini指令

看看php.ini指令

,除非你想通过php.ini简单地禁用函数,这会限制你自己的脚本,特别是如果你允许用户上传和管理他们的php文件,那么,对于这种规模的代码,任何一种调节脚本都将是可怕而复杂的。您需要监视所有已创建的文件或操作,并至少取消对尚未创建的文件或操作的任何调用


PHP在解析HTML或XML之类的东西时遇到了足够多的麻烦,所以我不想使用原始PHP来允许人们执行自己的脚本。

除非你想通过PHP.ini简单地禁用函数,这会限制你自己的脚本,特别是如果你允许用户上传和管理他们的PHP文件,那么,对于这种规模的代码,任何一种调节脚本都将是可怕而复杂的。您需要监视所有已创建的文件或操作,并至少取消对尚未创建的文件或操作的任何调用


PHP在解析HTML或XML之类的东西时遇到了足够多的麻烦,因此我不想使用原始PHP来让人们执行自己的脚本。

看到PHP中可用的函数数量,这使得安全地设置共享主机变得有些困难,仅仅通过将一些语句列入黑名单,是无法安全地允许用户这样做的


但是,如果您现在真的知道您正在做什么,那么就可以使用允许执行的函数的白名单。如果您确实希望安全地执行此操作,您可以通过在未经授权的PHP解析器中运行代码并使用结果来实现这一点。使用与您的网站相同的权限运行代码是不安全的。

看到PHP中可用的函数数量,这使得安全地设置共享主机变得有些困难,实际上没有办法通过将一些语句列入黑名单来安全地允许用户这样做


但是,如果您现在真的知道您正在做什么,那么就可以使用允许执行的函数的白名单。如果您确实希望安全地执行此操作,您可以通过在未经授权的PHP解析器中运行代码并使用结果来实现这一点。使用与您的网站相同的权限运行代码是不安全的。

如果您对服务器管理很在行,您可能会想出一些办法。您可能希望在服务器故障时询问此问题。我想如果你把文件复制到一个有正确权限的目录,它可能不会让脚本写任何东西,但我不确定


我的一个建议是在所有脚本的顶部添加set_time_limit,以保持运行时的简短。另外,我会设置一个脚本,一次只允许执行这么多次,这样您的服务器就不会崩溃。

如果您对服务器管理很在行,您可能会想出一些办法。您可能希望在服务器故障时询问此问题。我想如果你把文件复制到一个有正确权限的目录,它可能不会让脚本写任何东西,但我不确定


我的一个建议是在所有脚本的顶部添加set_time_limit,以保持运行时的简短。另外,我会设置一个脚本,一次只允许执行这么多次,这样服务器就不会崩溃。

不要使用regexp。。。如果要检查脚本中特定函数的使用情况,请使用内置的tokeniser。最简单的方法是通过设置正确的权限使该文件无法从PHP访问。这很可能需要根用户访问您的服务器—内置令牌服务器?那是什么?@RickyAYoder,tokeniser是一种函数,它允许你标记一种编程语言来进行词法分析,并检查这行是不是注释?你想过做一些注释吗?至少他们已经解决了这些问题,尽管承认这并不是解决所有问题的办法。同时阅读。不要使用regexp。。。如果要检查脚本中特定函数的使用情况,请使用内置的tokeniser。最简单的方法是通过设置正确的权限使该文件无法从PHP访问。这很可能需要根用户访问您的服务器—内置令牌服务器?那是什么?@RickyAYoder,tokeniser是一种函数,它允许你标记一种编程语言来进行词法分析,并检查这行是不是注释?你想过做一些注释吗?至少他们已经解决了这些问题,尽管承认这并不是解决所有问题的办法。也请阅读。可以理解
,但我不想只在运行一段代码时就完全禁用函数。好吧,在php afaik中没有其他方法可以本机禁用函数,另一个解决方案是在VM中以如此安全的模式运行php并经常重置它。但是我不认为有任何方法可以安全地允许服务器代码执行和公共访问。正如Mark Baker所提到的,您也可以标记提交的php代码,但是分析这些代码会让它变得可用非常痛苦。@RickyAYoder在您的问题下看到我的评论,您也可以在那里看一看哦,我明白了。谢谢我会检查一下。可以理解,但我不想仅仅在运行一段代码时就完全禁用函数。好吧,在php afaik中没有其他方法可以本机禁用函数,另一个解决方案是在VM中以如此安全的模式运行php,并经常重置它。但是我不认为有任何方法可以安全地允许服务器代码执行和公共访问。正如Mark Baker所提到的,您也可以标记提交的php代码,但是分析这些代码会让它变得可用非常痛苦。@RickyAYoder在您的问题下看到我的评论,您也可以在那里看一看哦,我明白了。谢谢我会查出来的。还有无特权解析器?我可以改变特权,比如说,一个特定的路径吗?你可以为PHP程序设置特权;例如但是,这仅在您具有对服务器的root访问权限的情况下才有效。而非特权解析器?我可以改变特权,比如说,一个特定的路径吗?你可以为PHP程序设置特权;例如但是,这仅在您具有服务器的root访问权限时才有效。此时,这似乎是最合理的解决方案。此时,这似乎是最合理的解决方案。