为了保证系统安全,PHP中哪些函数应该避免使用?这些函数存在哪些漏洞?
2014-05-23 15:10
1686 查看
为了保证系统安全,PHP中哪些函数应该避免使用?这些函数存在哪些漏洞?
davis3 票
1137
在开发过程中,哪些函数应该避免使用?函数的使用会导致什么漏洞?
评论 (0) • 分享 • 链接 • 2012-02-25
4个答案
票 数
finemond
1 票
1140
最佳答案
一 代码执行函数
PHP中可以执行代码的函数。如eval()、assert()、``、system()、exec()、shell_exec()、passthru()、 escapeshellcmd()、pcntl_exec() 等
demo code 1.1:
二 文件包含代码注射
文件包含函数在特定条件下的代码注射,如include()、include_once()、 require()、require_once()。
当allow_url_include=On ,PHP Version>=5.2.0 时,导致代码注射。
demo code 2.1:
访问http://127.0.0.1/include.php?a=data:text/plain,%3C?php%20phpinfo%28%29;?%3E 即
执行phpinfo()。
三 正则匹配代码注射
众所周知的preg_replace()函数导致的代码注射。当pattern中存在/e模式修饰符,即允许执行代码。这里我们分三种情况讨论下
3.1 preg_replace() pattern 参数注射
pattern即第一个参数的代码注射。
当magic_quotes_gpc=Off时,导致代码执行。
demo code 3.1:
访问http://127.0.0.1/preg_replace1.php?reg=%3C\/php%3E/e 即
执行phpinfo()。
3.2 preg_replace() replacement参数注射
replacement即第二个参数的代码注射,导致代码执行。
demo code 3.2:
当我们提交 http://127.0.0.1/preg_replace2.php?h=phpinfo() 即
执行phpinfo()。
3.3 preg_replace()第三个参数注射
我们通过构造subject参数执行代码。提交:http://127.0.0.1/preg_replace3.php?h=
phpinfo()
或者 http://127.0.0.1/preg_replace3.php?h=
${phpinfo%28%29}
导致代码执行
demo code 3.3:
四 动态代码执行
4.1 动态变量代码执行
demo code 4.1:
我们提交 http://127.0.0.1/dyn_func.php?dyn_func=system&argument=ipconfig 执行ipconfig命令
4.2 动态函数代码执行
demo code 4.2:
我们提交 http://127.0.0.1/create_function.php?foobar=system%28dir%29 执行dir命令
五 其他
5.1 ob_start()函数的代码执行
demo code 5.1:
5.2 array_map()函数的代码执行
demo code 5.2:
我们提交 http://127.0.0.1/array_map.php?callback=phpinfo 即执行phpinfo()。
5.3 unserialize()与eval()
unserialize()是PHP中使用率非常高的函数。不正当使用unserialize()容易导致安全隐患。
我们提交 http://127.0.0.1/unserialize.php?saved_code=O:7:%22Example%22:1:{s:3:%22var%22;s:10:%22phpinfo%28%29;%22;} 即执行phpinfo()。
5.4 容易导致安全问题的函数
同类型函数还有很多
array_map()
usort(), uasort(), uksort()
array_filter()
array_reduce()
array_diff_uassoc(), array_diff_ukey()
array_udiff(), array_udiff_assoc(), array_udiff_uassoc()
array_intersect_assoc(), array_intersect_uassoc()
array_uintersect(), array_uintersect_assoc(), array_uintersect_uassoc()
array_walk(), array_walk_recursive()
xml_set_character_data_handler()
xml_set_default_handler()
xml_set_element_handler()
xml_set_end_namespace_decl_handler()
xml_set_external_entity_ref_handler()
xml_set_notation_decl_handler()
xml_set_processing_instruction_handler()
xml_set_start_namespace_decl_handler()
xml_set_unparsed_entity_decl_handler()
stream_filter_register()
set_error_handler()
register_shutdown_function()
register_tick_function()
参考资料:PHP代码执行漏洞总结
相关文章推荐
- 服务器的分区,应该保证有如下的分区,目的很简单,为了管理上方便和系统的安全。
- php中使用exec,system等函数调用系统命令的方法(不建议使用,可导致安全问题)
- 使用PHP转义函数:避免XSS漏洞
- 本附录介绍iOS系统包含的框架,它们为编写iOS平台的软件提供必要的接口。下面的表格尽可能地列出框架中的类、方法、函数、类型以及常量使用的关键前缀,请避免在您的符号名称中使用这些前缀。
- php中使用exec,system等函数调用系统命令的方法(不建议使用,可导致安全问题)
- php中使用exec,system等函数调用系统命令的方法(不建议使用,可导致安全问题)
- PHPShop存在多个安全漏洞
- PHPShop存在多个安全漏洞
- php 上传文件类型判断函数(避免上传漏洞 )
- 使用漏洞扫描工具评估网络系统安全
- 安全 - MySQL 出现严重的密码安全漏洞,许多系统存在风险
- PHP执行linux系统命令的常用函数使用说明
- 使用SMSMSE服务器保证邮件系统安全
- ob_start-什么是输出缓冲区-php哪些函数使用前不能有输出
- php中使用exec,system等函数调用系统命令
- 安全 - MySQL 出现严重的密码安全漏洞,许多系统存在风险
- PHP - Manual手册 - 函数参考 - Filesystem 文件系统函数 - file_exists检查文件或目录是否存在
- PHP执行linux系统命令的常用函数使用说明
- php中使用exec,system等函数调用系统命令
- PHP openssl_encrypt函数安全漏洞