这两天,公司的一个客户平台突然发现里面的所产品都不能发布了。
偶立刻对他们的平台进行了测试。最终把目标锁定在几行图形缩略的代码上面。由于改公司的平台用户发布的产品图片都要进行检测和裁剪,以便能够让产品页更好的显示,所以这类代码出现问题直接影像到系统的正常运行。
错误如下:
 

Code
 1 Exception information: 
 2     Exception type: DllNotFoundException 
 3     Exception message: Unable to load DLL 'gdiplus.dll': 拒绝访问。 (Exception from HRESULT: 0x80070005 (E_ACCESSDENIED)) 
 4  
 5 Request information: 
 6     Request URL: http://www.*********.com/g/api.aspx?action=code&c4c5b1f446078a76= 
 7     Request path: /g/api.aspx 
 8     User host address: 58.82.225.131 
 9     User:  
10     Is authenticated: False 
11     Authentication Type:  
12     Thread account name: NT AUTHORITY\NETWORK SERVICE 
13  
14 Thread information: 
15     Thread ID: 7 
16     Thread account name: NT AUTHORITY\NETWORK SERVICE 
17     Is impersonating: False 
18     Stack trace:    at System.Drawing.SafeNativeMethods.Gdip.GdipCreateBitmapFromScan0(Int32 width, Int32 height, Int32 stride, Int32 format, HandleRef scan0, IntPtr& bitmap)
19    at System.Drawing.Bitmap..ctor(Int32 width, Int32 height, PixelFormat format)
20    at System.Drawing.Bitmap..ctor(Int32 width, Int32 height)
21    at Web.Lang.WebCode.CreateImage(String checkCode)
22    at Web.Lang.WebCode.ShowImages()
23    at IruoFloor.g.API.ShowCodeIMG()
24    at IruoFloor.g.API.Page_Load(Object sender, EventArgs e)
25    at System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e)
26    at System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e)
27    at System.Web.UI.Control.OnLoad(EventArgs e)
28    at System.Web.UI.Control.LoadRecursive()
29    at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
30   
 
 
因为该平台的程序除了一些小的更新外,程序一直运行的很稳定。。。
突然出现此类故障,也算是难得。。。
首先远程到服务器,进行检查,发现原有的权限配置没有更改过。把Gdiplus.dll加上Everyone权限.重启服务器(MS的系统不明原因重启下解决故障效率很高)
发现故障依旧。。。郁闷中。。
打开百度输入错误提示,考,尽然没有发现一篇文章介绍。
在GG下把,很好有两篇是在少的可怜,打开也就是说一些权限配置上的问题....
查下Gdiplus.dll,哦,原来这个DLL这两天暴出一个严重的漏洞,BMP文件可以直接挂马运行。。。是不小。。
服务器上面开启了自动更新,应该是自动更新程序造成的。。
难道不成要重装系统...
继续不放弃,不断的改变权限,把这个该死的GDI+漏洞补丁在打一次,就这样反复折腾了一个上午。。
把System.Drawing反汇编看看,其实里面就是直接DllImport调用Gdiplus.dll
无奈中已经做好的重装的准备
反正要重装了,在试下把原来.net 2.0(2.0已经卸到重装了)升级到.NET 3.0
结果咋样,搞定了。
对MS真是无语