月光博客

青青子衿, 悠悠我心, 但为君故, 沉吟至今

« 百度要往哪里走—潜规则还是透明化?遭遇猎头公司 »

五行代码实现ASP无组件上传

原文已经删除



原创文章如转载,请注明:转载自月光博客 [ http://www.williamlong.info/ ]

本文链接地址:http://www.williamlong.info/archives/380.html
  • 文章排行:
  • 1.ashi
  • 这是我见过最愚蠢的源码

    客户端和服务器不是一回事,用ADO读客户端的文件,你以为微软会让这么大的一个漏洞存在么?!
  • ip: 221.219.196.*  2006-2-12 22:49:20   回复该留言
  • 2.williamlong
  • 楼上,这段代码我可是在网站上测试运行通过的,你不要这么凭空瞎说哦。
  •   2006-2-12 22:51:21   回复该留言
  • 3.efei
  • 同感,这的确是最愚蠢的代码!最基本的服务器和客户端都没有分清楚。

    楼上说运行过,只不过你运行时,服务器就是你当时用着的那台电脑,就是说,客户端和服务器端在同一台电脑上,而这几句代码,只不过把东西从一个目录复制到另外一个目录
  • ip: 222.66.37.*  2006-2-22 20:20:59   回复该留言
  • 4.打抱不平
  • 难道不能先鼓励再指出问题吗?ashi, efei ,你愿意别人这样对待你的付出吗?
  • ip: 219.239.98.*  2006-2-23 16:48:28   回复该留言
  • 5.machine
  • 你使用本机作服务器并且本机浏览吧?这样并没有实现上传,读的是服务器上的文件,只不过刚好你服务器和客户端都是同一台机,所以能读出来,我晕~

    这个帖子快点删掉吧,怪搞笑的……
  • ip: 219.133.0.*  2006-3-19 14:11:40   回复该留言
  • 6.auto
  • 虽说错误严重,不过还是支持你改正一下吧,呵呵
  • ip: 221.210.227.*  2006-4-25 8:03:01   回复该留言
  • 7.想起时正是忘记
  • <%
    Class FileUploader
    Public File
    Private Sub Class_Initialize()
    Set File = Server.CreateObject("Scripting.FileSystemObject")
    End Sub
    Private Sub Class_Terminate()
    set File=nothing
    End Sub
    Public Property Get Form(sIndex)
    Form = ""
    End Property
  • ip: 60.2.17.*  2006-7-5 17:12:23   回复该留言
  • 8.想起时正是忘记
  • Public Default Sub Upload()
    Dim biData, sInputName
    Dim nPosBegin, nPosEnd, nPos, vDataBounds, nDataBoundPos
    Dim nPosFile, nPosBound
    biData = Request.BinaryRead(Request.TotalBytes)
    nPosBegin = 1
    nPosEnd = InstrB(nPosBegin, biData, CByteString(Chr(13)))
    If (nPosEnd-nPosBegin) <= 0 Then Exit Sub
    vDataBounds = MidB(biData, nPosBegin, nPosEnd-nPosBegin)
    nDataBoundPos = InstrB(1, biData, vDataBounds)
    Do Until nDataBoundPos = InstrB(biData, vDataBounds & CByteString("--"))
    nPos = InstrB(nDataBoundPos, biData, CByteString("Content-Disposition"))
    nPos = InstrB(nPos, biData, CByteString("name="))
    nPosBegin = nPos + 6
    nPosEnd = InstrB(nPosBegin, biData, CByteString(Chr(34)))
    sInputName = CWideString(MidB(biData, nPosBegin, nPosEnd-nPosBegin))
    nPosFile = InstrB(nDataBoundPos, biData, CByteString("filename="))
    nPosBound = InstrB(nPosEnd, biData, vDataBounds)
  • ip: 60.2.17.*  2006-7-5 17:13:33   回复该留言
  • 9.想起时正是忘记
  • If nPosFile <> 0 And nPosFile < nPosBound Then
    Dim oUploadFile, sFileName
    Set oUploadFile = New UploadedFile
    nPosBegin = nPosFile + 10
    nPosEnd = InstrB(nPosBegin, biData, CByteString(Chr(34)))
    sFileName = CWideString(MidB(biData, nPosBegin, nPosEnd-nPosBegin))
    oUploadFile.FileName = Right(sFileName, Len(sFileName)-InStrRev(sFileName, "\"))
    nPos = InstrB(nPosEnd, biData, CByteString("Content-Type:"))
    nPosBegin = nPos + 14
    nPosEnd = InstrB(nPosBegin, biData, CByteString(Chr(13)))
    oUploadFile.ContentType = CWideString(MidB(biData, nPosBegin, nPosEnd-nPosBegin))
    nPosBegin = nPosEnd+4
    nPosEnd = InstrB(nPosBegin, biData, vDataBounds) - 2
    oUploadFile.FileData = MidB(biData, nPosBegin, nPosEnd-nPosBegin)
    set File=oUploadFile
  • ip: 60.2.17.*  2006-7-5 17:14:38   回复该留言
  • 10.想起时正是忘记
  • Else
    nPos = InstrB(nPos, biData, CByteString(Chr(13)))
    nPosBegin = nPos + 4
    nPosEnd = InstrB(nPosBegin, biData, vDataBounds) - 2
    End If
    nDataBoundPos = InstrB(nDataBoundPos + LenB(vDataBounds), biData, vDataBounds)
    Loop
    End Sub
  • ip: 60.2.17.*  2006-7-5 17:15:14   回复该留言
  • 11.想起时正是忘记
  • Private Function CByteString(sString)
    Dim nIndex
    For nIndex = 1 to Len(sString)
    CByteString = CByteString & ChrB(AscB(Mid(sString,nIndex,1)))
    Next
    End Function
    Private Function CWideString(bsString)
    Dim nIndex
    CWideString =""
    For nIndex = 1 to LenB(bsString)
    CWideString = CWideString & Chr(AscB(MidB(bsString,nIndex,1)))
    Next
    End Function
    End Class
  • ip: 60.2.17.*  2006-7-5 17:16:11   回复该留言
  • 12.想起时正是忘记
  • Class UploadedFile
    Public ContentType
    Public FileName
    Public FileData
    Public Property Get FileSize()
    FileSize = LenB(FileData)
    End Property
    Public Sub SaveToDisk(sPath)
    Dim oFS, oFile
    Dim nIndex
    If sPath = "" Or FileName = "" Then Exit Sub
    If Mid(sPath, Len(sPath)) <> "\" Then sPath = sPath & "\"
    Set oFS = Server.CreateObject("Scripting.FileSystemObject")
    If Not oFS.FolderExists(sPath) Then Exit Sub
    Set oFile = oFS.CreateTextFile(sPath & FileName, True)
    For nIndex = 1 to LenB(FileData)
    oFile.Write Chr(AscB(MidB(FileData,nIndex,1)))
    Next
    oFile.Close
    End Sub
    End Class
    %>
  • ip: 60.2.17.*  2006-7-5 17:16:47   回复该留言
  • 15.一国民
  • 偶不喜欢upload组件,容易出现漏洞,尤其asp勘称“全球垃圾代码”,呵呵,一点都不过,不过支持你!兄弟!
  • ip: 222.169.221.*  2006-11-26 21:12:51   回复该留言
  • 16.LUCK
  • 放到别的服务器就不能运行了吗?我是菜鸟,我要试试
  • ip: 59.39.103.*  2007-7-31 17:28:52   回复该留言
  • 19.路人甲
  • 上传最重要的因素是表单的METHOD为POST,且要求enctype标记为multipart/form-data,所以博主的代码,根本就连最基本的要素都没达到。

    再分析一下博主的代码,关键代码是以下两句:
    objStream.LoadFromFile strFileName
    objStream.SaveToFile Server.MapPath(GetFileName(strFileName)),2

    而这两句代码的第一句是从一个文件中载入内容,第二句则是写入到另一个文件中。
    再看第一个文件的文件名是从哪儿来的呢?恰恰是从参数传递过来的。而博主的代码中根本就没从FORM提交过来的数据中取文件内容,而是根据传递过来的文件路径去读一个文件,所以这个功能在主机为localhost(也就是本机调试)的时候通过,而在正常的远程网站上是无法实现的(因为根本上述两句代码中的第一句根本无法读到内容)。
  • ip: 116.3.12.*  2008-9-9 11:02:45   回复该留言
  • 20.小白吃鸡蛋
  • 这两天想到了一个笑话,就是月光大哥的五行实现上传功能的代码,于是上网找了找,没想到还在,汗一个(都几年了,删了吧。)
    要不改个名字,asp木马,这样好点
  • ip: 218.95.79.*  2009-1-3 22:26:55   回复该留言

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

订阅博客

  • 订阅我的博客:订阅我的博客
  • 跟随我的推特:跟随我的推特
  • 跟随新浪微博:跟随新浪微博
  • 通过Google订阅本站
  • 通过鲜果订阅本站
  • 通过电子邮件订阅本站

站内搜索

热文排行

最新评论及回复

最近发表

网站收藏

本站采用创作共用版权协议, 要求署名、非商业用途和保持一致. 转载本站内容必须也遵循“署名-非商业用途-保持一致”的创作共用协议.

This site is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License.