zoukankan      html  css  js  c++  java
  • 文件上传验证

    文件上传的攻击方式

    一、JS检测绕过

    1、使用浏览器插件,删除检测文件后缀的js代码,然后上传文件即可绕过

    2、先把需要上传的文件后缀改成允许上传的格式,通过js校验,抓包把后缀名改为可执行文件的后缀上传实现绕过

    二、文件后缀绕过

    Apache的解析顺序是从右到左解析文件后缀的,如果最右侧的扩展名不可识别,继续往左判断,直到遇到可以解析的扩展名为止。

    比如:xxx.xls.xxx.xxx.xxx 因为后缀xxx不可以解析,所以向左解析后缀,最后解析出来是一个Excel表格

    看道哥那本书上写的是在1.x,2.x版本下有这个解析问题,现在使用的都是6,7甚至更高版本

    三、文件类型绕过

    如果服务器代码是通过Content-Type的值来判断文件的类型,那么就存在被绕过的可能。

    Content-Type的值是客户端传递的,是可以任意修改的。

    四、文件截断绕过

    %00代表结束符,有可能会把后边的字符删掉。

    http://www.xxx.xom/jieshu=111

    把111改为 1.php%00a.jpg,文件被保存到服务器时,%00会把“a.jpg”截断,保存到服务器的是1.php

    五、竞争条件攻击

    一些网站是先允许上传任意文件,然后检查上传文件是否包含特殊脚本,如果有则删除文件。这就存在上传和检验的时间差问题。

    可以事先写好 一句话,还没校验完成程序读取来内容就直接给我返回。

    六、文件内容绕过

    前256个字节是合规的,在后边加上可攻击脚本

    修复方案

    1、文件上传的目录设置为不可执行,去掉x

    2、判断文件类型,建议使用白名单的形式,对于图片的处理可以使用压缩函数或者resize函数,处理图片的同时破坏图片中可能包含的html代码

    3、使用随机数改写文件名和文件路径

    4、单独设置文件服务器域名(如果有条件),由于浏览器的同源策略一系列客户端攻击将失效。

      

  • 相关阅读:
    go_base_03_if_for_switch_goto_流程控制
    go_base_02_dataType_常用数据类型
    go_base_01_var_const_变量和常量
    go_install_01_golang开发环境安装配置
    go_install_02_golang插件安装
    数据封装和私有属性
    类变量 实例变量 属性查找顺序
    微服务架构之「 服务注册 」
    Nginx配置https证书
    Go:go程序报错Cannot run program "C:UsersdellAppDataLocalTemp\___go_build_hello_go.exe" (in directory "…………"):该版本的 %1 与你运行的 Windows 版本不兼容。
  • 原文地址:https://www.cnblogs.com/hanxiaobei/p/9479402.html
Copyright © 2011-2022 走看看