IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

php中assert方法的安全问题

博学无忧 2014-12-01 23:20:26 累计浏览 1,642 次
本机暂存

   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还要大。

同分类推荐文章

  1. 绿盟科技《APT组织研究年鉴》(2026 版)正式发布 (2026-06-16 20:21:10)
  2. 【已复现】Linux内核Fragnesia权限提升漏洞(CVE-2026-46300) (2026-06-15 10:53:58)
  3. 企业文档安全最佳实践(二):给文档上“身份证”——手动标密与智能自动标密 (2026-06-12 17:18:33)

查看更多 安全 文章 →

建议继续学习

  1. Fix Bug的五个阶段 (累计阅读 42,974)
  2. 使用gettext来支持PHP的多语言 (累计阅读 39,270)
  3. WordPress插件开发 -- 在插件使用数据库存储数据 (累计阅读 29,164)
  4. Paypal接口详细代码(PHP版,非API接口) (累计阅读 19,408)
  5. 调试工具之GDB (累计阅读 14,831)
  6. 我的PHP,Python和Ruby之路 (累计阅读 13,149)
  7. include(“./file.php”)和include(“file.php”)区别 (累计阅读 12,790)
  8. 15个最好的免费开源电子商务平台 (累计阅读 12,541)
  9. Redis消息队列的若干实现方式 (累计阅读 12,088)
  10. 到底什么是MVC? (累计阅读 11,868)