天天看点

php中assert方法的安全问题

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

执行后会有如下输出:

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的使用如下:

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

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