Junwen's home
  • ES6

    • ES6 Decorator
    • ES6核心特性
    • Promise&Generator
  • js原理

    • 简单实现bind、apply和call
    • 如何遍历一个dom tree
    • 实现函数currying
    • 实现一个event
    • 详解js的继承
    • 详解requestAnimationFrame
    • Canvas api详解
    • DOM事件
    • EventLoop详解
    • JavaScript的内存管理
    • JavaScript的运行机制
    • Math对象
    • new操作符都做了什么
    • create基本实现原理
    • Set、Map、WeakSet和WeakMap
    • web worker原理
    • WebGL教程(MDN)
  • jsInfoSeries

    • 简介
    • JavaScript基础知识
    • 基础知识2
    • 基础知识3
    • 基础知识4
  • 技巧

    • 5个js解构有趣用途
    • 如何使用set提高代码性能
    • cordova构建项目时的问题
    • js中轻松遍历对象属性的几种方式
  • 怎么写出更好的css
  • BFC详解
  • box-shadow详解
  • CSS小技巧
  • Grid布局详解
HTML
  • IP十问
  • http笔试
  • http协议
  • 浏览器原理
  • 浏览器缓存其实就这么一回事儿
  • 浏览器兼容性问题
  • 移动端开发兼容性适配
  • 前端性能优化
  • 前端如何进行seo优化
  • webpack

    • webpack HMR
    • webpack优化基本方法
  • leetcode题解

    • 两数之和
    • 判断整数是否为回文串
    • 无重复字符的最长子串
  • Js链表
  • JavaScript排序
  • React

    • 虚拟DOM原理理解
    • React Hook
    • 组件复用指南
  • Vue

    • Vue举一反三
面试题
读书笔记
GitHub (opens new window)

Syun0216

多读书多种树
  • ES6

    • ES6 Decorator
    • ES6核心特性
    • Promise&Generator
  • js原理

    • 简单实现bind、apply和call
    • 如何遍历一个dom tree
    • 实现函数currying
    • 实现一个event
    • 详解js的继承
    • 详解requestAnimationFrame
    • Canvas api详解
    • DOM事件
    • EventLoop详解
    • JavaScript的内存管理
    • JavaScript的运行机制
    • Math对象
    • new操作符都做了什么
    • create基本实现原理
    • Set、Map、WeakSet和WeakMap
    • web worker原理
    • WebGL教程(MDN)
  • jsInfoSeries

    • 简介
    • JavaScript基础知识
    • 基础知识2
    • 基础知识3
    • 基础知识4
  • 技巧

    • 5个js解构有趣用途
    • 如何使用set提高代码性能
    • cordova构建项目时的问题
    • js中轻松遍历对象属性的几种方式
  • 怎么写出更好的css
  • BFC详解
  • box-shadow详解
  • CSS小技巧
  • Grid布局详解
HTML
  • IP十问
  • http笔试
  • http协议
  • 浏览器原理
  • 浏览器缓存其实就这么一回事儿
  • 浏览器兼容性问题
  • 移动端开发兼容性适配
  • 前端性能优化
  • 前端如何进行seo优化
  • webpack

    • webpack HMR
    • webpack优化基本方法
  • leetcode题解

    • 两数之和
    • 判断整数是否为回文串
    • 无重复字符的最长子串
  • Js链表
  • JavaScript排序
  • React

    • 虚拟DOM原理理解
    • React Hook
    • 组件复用指南
  • Vue

    • Vue举一反三
面试题
读书笔记
GitHub (opens new window)
  • 白帽子讲web安全

    • HTML5安全
    • PHP安全
      • WebServer配置安全
      • Web框架安全
      • 互联网业务安全
      • 加密算法和随机数
      • 安全的开发流程
      • 安全运营
      • 应用层拒绝服攻击
      • 文件上传漏洞
      • 注入攻击
      • 点击劫持
      • 认证与会话管理
      • 访问控制
      • 跨站点请求伪造(CSRF)
      • 跨站脚本攻击
    • 深入react技术栈

      • chapter1
    • 高性能建站
    • 冴羽系列文章链接
    • books
    junwen
    2020-03-27

    PHP安全

    # 文件包含漏洞

    php :include(),include_once(),require(),require_once(),fopen(),readfile()
    jsp/servlet: ava.io.File(),java.io.FileReader()
    asp: include file,include virtual
    
    1
    2
    3

    当使用这4个函数包含一个新文件时,该文件将作为PHP代码执行,PHP内核并不会在意该被包含的文件是什么类型。


    # 本地文件包含

    要解决文件包含漏洞,应该尽量避免包含动态变量,尤其是用户可以控制的变量


    # 远程文件包含

    如果PHP的配置选项allow_uri_include为ON的话,则include/require函数是可以远程加载文件的,这种漏洞被称为远程文件包含漏洞(Remote File Inclusion) 简称RFI


    # 本地文件包含的利用技巧

    远程文件包含漏洞之所以能够执行命令,就是因为攻击者能够自定义被包含的文件内容。因此本地文件包含漏洞想要执行命令,也需要找到一个攻击者能够控制内容的本地文件。以下是本地文件包含后执行PHP代码:

    1. 包含用户上传的文件
    2. 包含data://或php://input等伪协议allow_uri_include需要设置ON
    3. 包含session文件
    4. 包含日志文件,比如web server的access log
    5. 包含/proc/self/environ文件
    6. 包含上传临时文件,比如数据库文件、缓存文件、应用日志等

    # 全局变量覆盖

    PHP中,register_globals为ON时尤其严重。用户可注入覆盖全局变量。

    # extract()变量覆盖

    int extract(array $var_array [,int $extract_type [,string $prefix]])
    
    1

    其中第二个参数指定函数将变量导入符号表时的行为,最常见的两个值是EXTR_OVERWRITE HE EXTR_SKIP 当值为EXTR_OVERWRITE时,在变量导入符号表的过程中,如果变量名发生冲突,则覆盖已有变量。EXTR_SKIP则表示跳过不覆盖。默认使用EXTR_OVERWRITE。

    # 遍历初始化变量

    # import_request_variables变量覆盖

    # parse_str变量覆盖

    parse_str函数往往被用于解析url的query string,但是当参数数值能被用户控制时,很可能导致变量覆盖。 以下是安全建议:

    1. 首先,确保register_globals=OFF.若不能自定义php.ini,则应该在代码中控制。
    2. 其次,熟悉可能造成变量覆盖的函数和方法,检查用户能否控制变量来源
    3. 最后养成初始化变量的好习惯

    # 代码执行漏洞

    eval函数


    # 定制安全的php环境

    php.ini中一些安全相关参数配置

    1. register_globals = OFF
    2. open_basedir 可以限制PHP只能操作指定目录下的文件
    3. allow_url_include为了对抗远程文件包含,请关闭此选项,一般应用也用不到此选项。
    4. allow_url_fopen
    5. display_errors 正式环境关闭
    6. log_errors 正式环境下用这个
    7. magic_quotes_gpc = OFF
    8. cgi.fix_pathinfo = 0
    9. session.cookie_httponly = 1 禁止javascript操作cookie
    10. session.cookie_secure = 1 ; 全站是https
    11. safe_mode
    在Github上编辑此页 (opens new window)
    #web安全
    上次更新: 3/22/2021, 3:47:15 AM
    HTML5安全
    WebServer配置安全

    ← HTML5安全 WebServer配置安全→

    最近更新
    01
    如何打造全链路项目生命周期的统一交付平台
    04-10
    02
    如何建立前端标准化研发流程
    04-10
    03
    如何从0到1一步步成体系地搭建CI
    04-10
    更多文章>
    Theme by Vdoing | Copyright © 2019-2021 Syun
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式