PHP 代码审计
目录
1. 概述2
2. 输入验证和输出显示 2
1. 命令注入3
2. 跨站脚本 3
3. 文件包含4
4. 代码注入 4
5. SQL注入4
6. XPath 注入4
7. HTTP 响应拆分5
8. 文件管理5
9. 文件上传5
10. 变量覆盖5
11. 动态函数6
3. 会话安全 6
1. HTTPOnly设置6
2. domain 设置6
3. path设置6
4. cookies持续时间6
5. secure 设置6
6. session 固定7
7. CSRF 7
4. 加密7
1. 明文存储密码7
2. 密码弱加密7
3. 密码存储在攻击者能访问到的文件7
5. 认证和授权7
1. 用户认证7
1. 函数或文件的未认证调用7
3. 密码硬编码8
6. 随机函数8
1. rand() 8
2. mt_srand()和mt_rand() 8
7. 特殊字符和多字节编码8
1. 多字节编码8
8. PHP危险函数 8
1. 缓冲区溢出8
2. session_destroy()删除文件漏洞9
3. unset()-zend_hash_del_key_or_index漏洞9
9. 信息泄露10
1. phpinfo 10
10. PHP环境10
1. open_basedir设置10
2. allow_url_fopen 设置10
3. >allow_url_include 设置10
4. safe_mode_exec_dir设置 10
5. magic_quote_gpc 设置10
6. register_globals设置11
7. safe_mode设置 11
8. session_use_trans_sid 设置11
9. display_errors设置11
10. expose_php 设置11
1. 概述
代码审核,是对应用程序源代码进行系统性检查的工作。它的目的是为了找到并且修复应
用程序在开发阶段存在的一些漏洞或者程序逻辑错误,避免程序漏洞被非法利用给企业带来不必
要的风险。
代码审核不是简单的检查代码,审核代码的原因是确保代码能安全的做到对信息和资源进
行足够的保护,所以熟悉整个应用程序的业务流程对于控制潜在的风险是非常重要的。审核人员
可以使用类似下面的问题对开发者进行访谈,来收集应用程序信息。
应用程序中包含什么类型的敏感信息,应用程序怎么保护这些信息的?
应用程序是对内提供服务,还是对外?哪些人会使用,他们都是可信用户么?
应用程序部署在哪里?
应用程序对于企业的重要性?
最好的方式是做一个 checklist,让开发人员填写。Checklist 能比较直观的反映应用程序
的信息和开发人员所做的编码安全,它应该涵盖可能存在严重漏洞的模块,例如:数据验证、身
份认证、会话管理、授权、加密、错误处理、日志、安全配置、网络架构。
2. 输入验证和输出显示
大多数漏洞的形成原因主要都是未对输入数据进行安全验证或对输出数据未经过安全处理,
比较严格的数据验证方式为:
1. 对数据进行精确匹配
2. 接受白名单的数据
3. 拒绝黑名单的数据
4. 对匹配黑名单的数据进行编码
在 PHP 中可由用户输入的变量列表如下:
$_SERVER
$_GET
$_POST
$_COOKIE
$_REQUEST
$_FILES
$_ENV
$_HTTP_COOKIE_VARS
$_HTTP_ENV_VARS
$_HTT