【问题标题】:php hook core functionsphp钩子核心函数
【发布时间】:2012-07-27 10:39:00
【问题描述】:

我想在执行之前挂钩/或替换标准核心函数,例如我要阻止 includerequire 访问任何脚本。有什么方法可以在没有任何额外的 .dll 的情况下实现它?或者另一种情况is_array($myarr); 我会挂在array($myarr) === $myarr; 上(看起来更快)以避免创建额外的类和函数。

Ps 和另一个问题:如何防止所有 php 在一段时间后执行?我有带有 php 部分的 html 模板<?=$myvar?> 我想在我的脚本结束工作时完全防止短的 sintax 和执行,我必须尝试什么?

【问题讨论】:

  • bool override_function ( string $function_name , string $function_args , string $function_code )

标签: php security hook core


【解决方案1】:

关于标准函数的钩子:没有外部模块就无法做到这一点。 APD PECL module 将完成这项工作。

rename_function('require', 'internal_require'); // saving reference to original function
override_function('require', '$filename', 
                  'print "require called"; internal_require($filename);');

第二个问题不是很清楚。你想挂钩标准is_array 函数,array() 词法构造还是(array) 类型转换?

关于停止php解释:看看__halt_compiler函数。但请记住,后续的 php 块将只是嵌入到 HTML 中(因此每个人都可以看到)。

【讨论】:

  • 谢谢,很好的回答。关于第二个 - 是的,我想将标准功能路由到我的更快。关于halt_compiler是否足以正则表达式删除所有内部php标签以避免可见?
  • @Jacob88 你可以用我上面提供的方法实现你的is_array。至于删除 php 标签中的所有内容,我强烈建议您使用任何高级文本编辑器(或流编辑器)来执行此操作,而不是尝试动态执行此操作。只需使用Search and Replace 工具。
  • 应该注意像requireinclude这样的语句不能被覆盖
【解决方案2】:

如果要禁用功能,可以使用安全模式,但不推荐使用,不推荐使用。正如 madfriend 所说, __halt_compiler 只是将它下面的所有内容作为文本发送。请记住,它只能从最外层范围调用 - 即不在花括号内(if、循环、函数等)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多