php安全与漏洞

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等文件包含函数

おすすめ

転載: blog.csdn.net/weixin_42043407/article/details/118003443