白帽子讲安全阅读笔记

本文探讨了PHP中的安全问题,包括文件包含漏洞、变量覆盖及文件上传风险。建议设置open_basedir限制文件访问,禁用危险函数,并采用安全的文件上传策略。同时,提到了密码哈希与Session管理在认证中的作用,以及同源策略和沙箱模型在浏览器安全中的应用。强调了安全世界观,如黑白名单、最小权限和纵深防御原则。
摘要由CSDN通过智能技术生成

PHP安全

一,文件包含

原理:实际就是代码注入,对用户的输入过滤的不够严格,过分相信。
PHP包含函数: incllude(),include_once(),require(),require_once()。这几个函数把包含进来的文件的内容当作php代码来执行,不管后缀名
本地包含:被包含的文件在目标服务器上
远程包含:被包含的文件在其他主机上
本地包含的利用技巧:

  • 包含本地文件*
  • 包含data:和php;//等伪协议
  • 包含日志,access_log(请求信息)和error_log(出错请求)
  • 包含session文件
  • 包含/proc/self/environ 文件。
  • 包含上传的临时文件
  • 包含其他应用创建的文件,比如数据库文件、缓存文件、应用日志等,需要具体情况具体分析。

注意:

  • 当设置了open_basedir,那么就不能包含web目录之外的文件了
  • php://input和data伪协议,远程包含要求 allow_url_include 设置为 ON

二,变量覆盖漏洞

全局变量覆盖:
注意:register_globals在PHP 5.3.0废弃了,所以这个方法现在应该不能用了
extract()变量覆盖

  • extract()函数能将变量从数组导入当前的符号表
  • 当extract()第二个参数为EⅩTR_SKIP,则不会覆盖已有变量的值
  • 注意:extract( G E T ) 不 能 写 成 e x t r a c t ( _GET)不能写成extract( GET)extract(_GET[‘a’])

$$变量覆盖

$a='b';
$b='c';
echo $$a;//相当于echo &b

import_request_variables 变量覆盖

  • GET/POST/Cookie 变量导入到全局作用域中
  • PHP 4 >= 4.1.0, PHP 5 < 5.4.0

parse_str()
定制安全的php环境

  • open_basedir,限制php只能操作特定目录文件,注意/a和/a/的不同
  • allow_url_fopen = Off
  • allow_url_include = Off,远程文件包含
  • display_errors = Off,防止泄露信息
  • log_errors = On,记录错误信息,关闭回显
  • magic_quotes_gpc = OFF,能被绕过,同时会有新的安全问题
  • session.cookie_httponly = 1,防止跨站脚本
  • disable_functions
  • 。。。。。。。。

文件上传漏洞

问题:

  1. 上传文件是 Web 脚本语言,服务器的 Web 容器解释并执行了用户上传的脚本,导致代 码执行;
  2. 上传文件是 Flash的策略文件 crossdomain.xml,黑客用以控制 Flash 在该域下的行为(其 他通过类似方式控制策略文件的情况类似);
  3. 上传文件是病毒、木马文件,黑客用以诱骗用户或者管理员下载执行
  4. 上传文件是钓鱼图片或为包含了脚本的图片,在某些版本的浏览器中会被作为脚本执 行,被用于钓鱼和欺诈。

条件:

  1. 上传的文件能被容器解释执行=>上传文件所在目录能把web覆盖到
  2. 用户能访问到=>要知道路径
  3. 文件的核心内容没有被改变=>恶意代码没有被过滤掉

解决办法:

  1. 上传目录设置不可执行
  2. 对文件名进行重命名,对文件路径重写
  3. 白名单过滤
  4. 单独设置文件服务器的域名

认证与会话管理

密码与登录

  • 明文密码经过哈希后(比如 MD5 或者 SHA-1)再保存到数据库中
  • 登录时判断用户提交的“密码”哈希值,与保存在数据库中的“密码”哈希值是否一致
  • MD5(Username+Password+Salt),俗称‘加盐’。加的salt是个随机数,这样即使密码相同,最后的哈希值也不一样,杜绝了彩虹表。

Session 与认证

  • 当用户登录完成后,在服务器端就会创建一个新的会话(Session),服务器端维护所有在线用户的 Session。有些服务器会把Session加密储存在Cookie中,让客户端保存
  • 浏览器需要把当前用户持有的 SessionID 告知服务器。
  • 把 SessionID 加密后保存在 Cookie 中跟随http请求发到服务器

单点登录

  • 一次登录就可访问所有的业务
  • 但是对于某些敏感的业务会要求额外认证

访问控制

Web框架安全

MVC架构

  • Ⅴiew 层负责用户视图、页面展示等工作
  • Controller 负责应用的逻辑实现,接收 Ⅴiew 层传入的用户请求,并转发给对应的 Model 做处理;
  • Model 层则负责实现模型,完成数据的处理

防御

  • 在 Ⅴiew 层,可以解决 ⅩSS 问题
  • 使用 security token 解决 CSRF 攻击

浏览器安全

同源策略

  • 同协议,同域名(ip),同端口
  • <script>、<img>等标签不受同源策略限制,但是浏览器限制了 JavaScript 的权限,使其不能读、写返回的内容。
  • 跨域 访问的基础““JavaScript 无法控制该HTTP 头”
  • DOM、Cookie、ⅩMLHttpRequest ,浏览器加载的一些第三方插件也有各自的同源策略

沙箱

  • 多进程

安全世界观

  • 黑白名单
  • 最小权限
  • 纵深防御
  • 数据与代码分离
  • 不可预测性
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值