php替代eval_php禁用eval - 也就这样

The eval() language construct is very dangerous because it allows execution of arbitrary PHP code.

eval是语言结构,不是函数,所以无法使用disable_functions来禁用

之前写过:从 php 内核挂载钩子解密源码,禁用的原理和这个差不多static zend_op_array* guard_compile_string(zval *source_string, char *filename)

{

if (strstr(filename, "eval()'d code")) {

return NULL;

}

return old_compile_string(source_string, filename);

}

PHP_MINIT_FUNCTION(guard)

{

old_compile_string = zend_compile_string;

zend_compile_string = guard_compile_string;

return SUCCESS;

}

PHP_MSHUTDOWN_FUNCTION(guard)

{

zend_compile_string = old_compile_string;

return SUCCESS;

}

为什么要写这篇文章

主要是因为之前太浪了:MySQL之类的端口都是直接绑定到公网的(并没有进行防火墙限制)

博客的目录权限为了偷懒直接设置成了 0777

最主要的是产生的严重后果:今天写文章的时候突然发现文章附件多了个为归属的fileadmin.zip;瞬间菊花一紧,上服务器一看,各种web shell。

在线工具的各种配置更新的还是比较及时,端口也收的比较紧,review之后发现应该不会产生类似的问题;这个问题暂时出现在了博客的vps上。

后面怎么解决这样的问题不向外暴露内部的端口

php hook eval

及时同步最新的php配置等

其他问题

laravel 中使用了 jeremeamia/superclosure 包,而这个包中使用了eval,所以不能正常工作;这样就需要在上面的代码中做个白名单。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值