session与cookie
禁用cookie,url携带sessionId
nocookie.php
<?php
// ini_set 修改 php.ini 配置项
ini_set('session.use_cookies',0);
ini_set('session.use_only_cookies',0);
ini_set('session.use_trans_sid',1);
ini_set('session.name','sid');
session_start();
$_SESSION['user'] = array('uid'=>1);
echo '<a href="session_url.php">使用url传递sessionId</a>';
session_url.php
<?php
// 取session值
ini_set('session.use_cookies',0);
ini_set('session.use_only_cookies',0);
ini_set('session.use_trans_sid',1);
ini_set('session.name','sid');
$sess_name = session_name();
session_start();
print_r($_SESSION['user']);
session fixation攻击
- 黑客访问网站获取sessionid
- 伪造一个页面指向?sid=sessionid,用户输入账号密码
- 黑客获得登录成功的sessionid,完成其他操作
- 【解决方案】登录完成后,重写sessionid
session保持
- 攻击者获取sessionId,成功进入系统,设置定时器不同刷新页面,使得session一直有效
- 【解决方案】服务端不存储session,将用户信息存储到本地cookie;由于cookie明文存储可以派发公钥共客户端加密,服务端使用私钥解密。
文件包含漏洞
include
require
fopen
readfile
...
案例展示1
- /subfiles/a.php
<?php
echo 'a.php';
- /subfiles/b.php
<?php
echo 'b.php';
- /subfiles/ab.php.jpg
<?php
phpinfo();
- upload.php
<?php
$path = $_GET['path'];
include('/subfiles/'.$path);
- ab.php.jpg 为上传php文件 jpg后缀只是为了过图片上传后缀检查
- 请求 http://soap.com/upload.php?path=ab.php.jpg
- 最后 获得服务器信息
案例展示2
读取网站根目录外文件
- upload.php
<?php
$path = $_GET['path'];
include($path);
包含远程文件(有风险)
- php.ini 开启
allow_url_include = on
解决方案
避免用户直接使用include等文件包含函数