日期:2014-05-17  浏览次数:20502 次

【100分】如何防范上传的图片包含恶意代码???求高手!!!
如题,
公司要实现一个鉴证图片上传的功能,
但要防止有人在图片中附加恶意代码,
目前有一些基本的想法,
但感觉还是不够可靠,
有没有人做过这个功能的?
赐教一二啊

------解决方案--------------------
是为了防止php asp恶意程序伪装成图片么?
------解决方案--------------------
后缀可以随意改
如果真的要去验证是否是真正的图片,感觉上最终得去验证图片的格式是否合法
这样肯定费劲

以前为了防止这样的事情,我一般不去计较他上传的是什么
不给它上传的目录执行的权限一般情况下就比较安全了

不知道楼主是更关注安全,还是更关注图片的真实性


------解决方案--------------------
引用:
是的,
网上关于这块的资料很少,
一般都是从图片流中过滤关键字,
问题是我不知道这些关键字是否真的能把木马神马的都过滤掉。。。。


那就把上传的目录的执行权限拿掉,一般情况下是没问题的
------解决方案--------------------
上传过程肯定是不会执行脚本的
楼主以前不是做B/S程序的吧
------解决方案--------------------
上传文件检测类型到目前为止我只看到过两种,第一种是检测文件的后缀名;第二种是检测文件的头部编码,不同类型文件的头部编码是不一样的(不知道这样说恰当不,有错误希望大家指出),比如255216是jpg;7173是gif;6677是BMP,13780是PNG;7790是exe,8297是rar...这篇文章代码多有参考网络.

前台文件:两种方法的前台文件是一样的.

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>无标题页</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:FileUpload ID="FileUpload1" runat="server" />
<asp:Button ID="btn_upload" runat="server" OnClick="btn_upload_Click" Text="上传" />
</div>
</form>
</body>
</html>


后台文件:
第一种方法:安全性相对第二种低,把文本文件1.txt改成1.jpg照样可以上传,但其实现方法容易理解,实现也简单,所以网上很多还是采取这种方法.

using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

public partial class _Default : System.Web.UI.Page 
{
   protected void Page_Load(object sender, EventArgs e)
  {

  }
  protected void btn_upload_Click(object sender, EventArgs e)
  {
     Boolean fileOk = false;
     string path = Server.MapPath("~/images/");
     //判断是否已经选取文件
     if (FileUpload1.HasFile)
     {
        //取得文件的扩展名,并转换成小写
        string fileExtension = System.IO.Path.GetExtension     (FileUpload1.FileName).ToLower();
        //限定只能上传jpg和gif图片
        string[] allowExtension = { ".jpg", ".gif" };
        //对上传的文件的类型进行一个个匹对
        for (int i = 0; i < allowExtension.Length; i++)