• 郑州北大青鸟首页
  • 网站导航
  • 河南安卓工程师培养基地 河南拥有IT体验馆 课程专业全、规模大校区河南多年连获全国教学质量奖 2011-2018年获北大青鸟总部荣誉奖
当前位置: 首页 > 栏目 > 技术交流 > 网络技术

php安全代码小总结

时间:06-19 来源:北大青鸟  作者:北大青鸟 点击:0 

 一,漏洞篇

-----------------------------------------------
[1].Sql-Injection
留意:cookie及x-forward-for,宽字节,报错注射等
挖掘漏洞参考
变量
$_GET[""],$_POST[""],$_COOKIE[""], $SERVER[""]
数据库操作函数
mysql_query()
数字型注入防范:
1.is_numeric() ctype_digit() intval()
2.str_length()确定长度
字符型注入防范:
1.mysql_real_escape_string()
2.数据库查询语句前加@防爆错
3.str_length()确定长度
-----------------------------------------------
[2].Command-Execution
函数:
system(),passthru(),popen(),exec()
数据库操作函数:
exec,system,popen,passthru,proc_open,shell_exec
执行命令管道符 % | >
测试如0 | dir c:
|| 双竖线的作用,前面语句执行错误则执行后面语句
如xx"+||+whoami+||+echo
-----------------------------------------------
[3].File-Inclusion
函数:
include(),require(),include_once(),require_once()
远程文件包含漏洞要求
allow_url_fopen()  allow_url_include()  file_get_contents()
绕过:zlib://和ogg://
5.2.0之后版本
data://text/plain;base64,PD9waHAgcGhwaW5mbygpOz8+  //
@eval(file_get_contents('php://input'));  //POST phpinfo();
配合%00截断,新版本自动转义\0
-----------------------------------------------
[4].CSRF
CSRF防范策略
1>验证http-referer字段
安全性低,易被伪造
2>在请求地址中添加token并验证
token可在用户登录后存放在session中,每次请求时将token从session中取出,去请求的token对比以防范CSRF
GET方式:http://url/?=token

如果一个网站接受请求地方比较多,则在每次页面加载时遍历整个dom树,在dom中每个a和form标签后加入token
但在动态页面加载后产生的html代码,则需要以硬编码的形式手工添加
这种方式安全性弱点在于,如在论坛等交互比较频繁的地方hacker可构造环境盗取token并进而构造csrf攻击
故手工关闭referer
3>在HTTP头中自定义属性并进行验证。通过XMLHttpRequest类。
通常用于Ajax方法对页面局部的异步刷新
但适应性一般,对已有的网站架构局限性较大
-----------------------------------------------
[5].XSS(Cross Site Script)
反射型与存储型
控制$_GET,$_POST,$_COOKIE 各种传入的变量
使用htmlspecialchars()函数进行基础过滤
结合CSRF实现自动化利用
-----------------------------------------------
[6].File_Upload
函数:move_uploaded_file()
变量:$_FILES
php文件上传利用form表单进行文件上传时必须为post使用multipart/form-data才能完整的传递文件数据
php利用$_FILES系统函数的相关参数与函数move_upload_file函数来实例把由$_FILES全局变量生成的临时文件移动到指定目录完成文件的上传
$_FILES['files']['name']客户端文件的原名称
$_FILES['files']['type']文件的MIME类型
$_FILES['files']['size']已上传文件的大小
$_FILES['files']['tmp_name']储存的临时文件名,一般为系统默认
$_FILES['files']['error']该文件上传到相关的错误代码
防范方式:
1>判断MIME TYPE文件类型如$_FILES['files']['type']=="image/jpeg",判断文件大小,如$_FILES['files']['size']<10000 && $_FILES['files']['size']>100
2>指定上传文件名,如依赖时间生成hash(time).jpg等方式
3>根据文件后缀名判断文件
如file_ext=substr($filename,$strrpos($filename,'.')+1);
注意是否可能有双扩展名,二次上传突破等逻辑问题
4>服务器尝试渲染文件等方式判断是否为图片
5>不依赖于客户端js脚本限制上传文件类型
6>白名单规则
apache服务器常见上传安全问题
1>配合.htaccess利用上传
AllOverride ALL 允许子规则覆盖父规则
.htaccess添加AddType Application/x-httpd-php .jpg
2>文件名解析漏洞
*.php.123
在.htaccess添加AddHandler php5-script .php,文件名中包含php扩展名可以php脚本执行,如x.php.jpg
.php3 .php4扩展名

二,配置篇
1>关注漏洞信息,及时更新版本
2>php.ini httpd.conf .htaccess文件配置
    1)safe_mode相关配置
    2)register_globals关闭
    3)open_basedir配置,防范目录遍历
    4)allow_url_fopen关闭
    5)disable_functions配置
    6)magic_quotes_gpc打开
    7)error_reporting=E_ALL & ~E_NOTICE
    8)display_errors=Off避免攻击者获取更多信息
    9)expose_php=Off隐藏版本信息
3>最小化服务器其他账户权限
4>第三方安全加固软件安装
5>调用第三方安全防护文件,配置php.ini
include_path=".:/php/includes"
auto_pretend_file="anti-inj.php"
auto_appent_file=
精彩专题
热点排行