< php assert,php中assert方法的安全问题

php中assert本来是用于调试的,如果assert方法内的代码不为true,则给个Warning提醒。如下面的代码。

assert('1==2');

?>

执行后会有如下输出:

Warning: assert(): Assertion "1==2" failed in D:\green\APMServ5.2.6\www\htdocs\phpinfo.php on line 2

有个assert_option方法可以对assert进行一些控制。默认值如下:

ASSERT_ACTIVE=1 //Assert函数的开关

ASSERT_WARNING =1 //当表达式为false时,是否要输出警告性的错误提示,issue a PHP warning for each failed assertion

ASSERT_BAIL= 0 //是否要中止运行;terminate execution on failed assertions

ASSERT_QUIET_EVAL= 0 //是否关闭错误提示,在执行表达式时;disable error_reporting during assertion expression evaluation

ASSERT_CALLBACK= (NULL) // 是否启动回调函数 user function to call on failed assertions

如果按照默认值,当assert进行判断时,如果为false,则会发出Warning的提醒,但是依然会继续向下执行。对于调试很好,尤其是可以使用callback,但是生产环境就不建议使用了。

assert的callback的使用如下:

// Active assert and make it quiet

assert_options(ASSERT_ACTIVE, 1);

assert_options(ASSERT_WARNING, 0);

assert_options(ASSERT_QUIET_EVAL, 1);

// Create a handler function

function my_assert_handler($file, $line, $code)

{

echo "


Assertion Failed:File '$file'
Line '$line'
Code '$code'
";

}

// Set up the callback

assert_options(ASSERT_CALLBACK, 'my_assert_handler');

// Make an assertion that should fail

assert('mysql_query("")');

?>

但是,assert也有安全问题,这个也是不建议在生产环境使用assert的一个重要原因。请看如下代码:

function fo(){

file_put_contents('a.php','www.bo56.com');

return true;

}

$func = $_GET["func"];

assert("$func()");

?>

如果对用户输入的数据过滤不严谨的话,assert的危害比eval还要大。

技术交流

42e1274b8af00aa6b98a5ce9d1810905.gif

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值