标签:
1. 什么是文件上传漏洞
程序员由于没有对上传的文件进行严格限定,导致黑客可以通过工具上传其他格式的程序文件(比如:webshell),这样黑客就会拿到一个可执行环境,在服务器上搞破坏。
一个常见的例子,很多网站存在上传图片的功能,如果不对上传图片的扩展名进行检测、过滤就会造成上传漏洞。
2. 如何防范上传漏洞
步骤:前端JS代码限定--->后台代码检测--->取消文件目录执行脚本的权限。
以如何防范图片上传漏洞做个过程分析:
新建一个解决方案:
2.1 第一步前端用JavaScript对上传文件的扩展名进行判定,不符合格式的文件禁止上传。但是用户可通过禁用或修改JS代码依然可以上传各种类型的文件,所以JS在这的功能也只是辅助用户正确选择文件。
前端代码:
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 2 <html xmlns="http://www.w3.org/1999/xhtml"> 3 <head> 4 <title></title> 5 <script type="text/javascript"> 6 function showImgPath() { 7 var fileName = document.getElementById("fileImg").value; 8 var ext = fileName.substr(fileName.lastIndexOf(‘.‘)); 9 if (ext == ".jpeg" || ext == ".jpg" || ext == ".png" || ext == ".gif") { 10 return true; 11 } 12 else { 13 alert("请选择.jpeg/.jpg/.png/.gif/格式图片"); 14 } 15 } 16 </script> 17 </head> 18 <body> 19 <form method="post" enctype="multipart/form-data" action="FileUploadHandler.ashx"> 20 <input type="file" name="image" id="fileImg" onchange="showImgPath()" /> 21 <input type="submit" value="提交" /> 22 </form> 23 </body> 24 </html>
2.2 第二步就是后台接收到前端传来的图片文件后,做类似前端的代码处理过程,同样是对文件扩展名进行检测。格式如果不符合要求就结束此次请求,相反就把图片保存到存储目录中。
后台代码:
1 public class FileUploadHandler : IHttpHandler 2 { 3 4 public void ProcessRequest(HttpContext context) 5 { 6 context.Response.ContentType = "text/html"; 7 //获取表单上传的文件 8 HttpPostedFile file= context.Request.Files["image"]; 9 //获取文件扩展名 10 string ext= Path.GetExtension(file.FileName); 11 if (ext == ".jpeg" || ext == ".jpg" || ext == ".gif" || ext == ".png") 12 { 13 //设置文件的储存路径,Guid的目的是防止文件名相同 14 string path = "/Image/" + Guid.NewGuid().ToString() + file.FileName; 15 //保存文件到Image目录 16 file.SaveAs(context.Request.MapPath(path)); 17 context.Response.Write("Upload Success!"); 18 } 19 else 20 { 21 //结束此次上传请求 22 context.Response.Write("Upload Filed!"); 23 context.Response.End(); 24 } 25 } 26 27 public bool IsReusable 28 { 29 get 30 { 31 return false; 32 } 33 } 34 }
2.3完成前两步也并不是万事大吉,黑客可能还是会有方法将网马上传到我们的服务器。接下来我们要做的一步就是在IIS上把文件上传目录的权限设置成只读模式,这样在该目录下木马程序就不能被执行。
3.效果演示:
标签:
原文地址:http://www.cnblogs.com/gao-yang/p/4891437.html