因为不想普通而努力
请不要放弃   
如逐火的英桀一般,不应留下任何遗憾,因为他们曾骄傲的活过
|

夜未至

园龄:2年7个月粉丝:32关注:12

文件上传之简单验证方式

前排图片马:

copy 一张图片.png/b+一句话木马.php 生成图片名称.png

 

客户端的验证:

JavaScript的验证,即验证部分在前端,这是简单的,因为我们只需要禁用浏览器的JavaScript特效就好。比如:

复制代码
<script type="text/javascript">
    function checkFile() {
        var file = document.getElementsByName('upload_file')[0].value;
        //获取到文件名
        if (file == null || file == "") {
            alert("请选择要上传的文件!");
            return false;
        }
       
        var allow_ext = ".jpg|.png|.gif";
         //定义允许上传的文件类型
        
        var ext_name = file.substring(file.lastIndexOf("."));
        //提取上传文件的类型。
        //通过lastIndexOf取到“.”的索引,再使用substring函数截取 .后缀名
       
        if (allow_ext.indexOf(ext_name) == -1) {
        //如果 allow_ext 中没有 ext_name字符串,则返回-1
            var errMsg = "该文件不允许上传,请上传" + allow_ext + "类型的文件,当前文件类型为:" + ext_name;
            alert(errMsg);
            return false;
        }
         //判断上传文件类型是否允许上传
    }
</script>
复制代码

 

 

服务端的验证:

服务端的验证就会比较安全,相对应的绕过的难度也会增加,因为猜不到源码,不过要小心git源码泄露。比如

服务端MIME类型验证

  content-Type 

 

 

服务器文件内容验证 ( 文件头(文件幻数) 、文件加载检测 ):服务器文件内容验证-文件头:

图片格式往往不是根据文件后缀名去做判断的。文件头是文件开头的一段二进制,不同的图片类型,文件头是不同的。文件头又称文件幻数。

常见文件幻数

JPG: FF D8 FF EO 00 10 4A 46 49 46.
GIF:47 49 46 3839 61(GIF89a).
PNG:89 50 4E 47

 



 

posted @   夜未至  阅读(232)  评论(0编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起