php中assert方法的安全问题
php中assert本来是用于调试的,如果assert方法内的代码不为true,则给个Warning提醒。如下面的代码。
<?php
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的使用如下:
<?php
// 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 "<hr>Assertion Failed:File '$file'<br />Line '$line'<br />Code '$code'<br /><hr />";
}
// Set up the callback
assert_options(ASSERT_CALLBACK, 'my_assert_handler');
// Make an assertion that should fail
assert('mysql_query("")');
?>但是,assert也有安全问题,这个也是不建议在生产环境使用assert的一个重要原因。请看如下代码:
<?php
function fo(){
file_put_contents('a.php','www.bo56.com');
return true;
}
$func = $_GET["func"];
assert("$func()");
?>如果对用户输入的数据过滤不严谨的话,assert的危害比eval还要大。
建议继续学习:
扫一扫订阅我的微信号:IT技术博客大学习
- 作者:信海龙 来源: 博学无忧
- 标签: assert
- 发布时间:2014-12-01 23:20:26
-
[914] WordPress插件开发 -- 在插件使用 -
[135] 解决 nginx 反向代理网页首尾出现神秘字 -
[54] 整理了一份招PHP高级工程师的面试题 -
[53] 如何保证一个程序在单台服务器上只有唯一实例( -
[52] 海量小文件存储 -
[52] 全站换域名时利用nginx和javascri -
[52] Innodb分表太多或者表分区太多,会导致内 -
[51] 用 Jquery 模拟 select -
[50] CloudSMS:免费匿名的云短信 -
[48] 分享一个JQUERY颜色选择插件
