2006-1-13 10:13:45
五行代码实现ASP无组件上传
原文已经删除
- ◇ 1.ashi
- 这是我见过最愚蠢的源码
客户端和服务器不是一回事,用ADO读客户端的文件,你以为微软会让这么大的一个漏洞存在么?!
- ip: 221.219.196.* 2006-2-12 22:49:20 回复该留言
- ◇ 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 回复该留言
- ◇ 14.1
- *_*
T_T
- ip: 61.191.224.* 2006-8-14 1:38:41 回复该留言
- ◇ 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 回复该留言
- ◇ 17.结石
- 继续加油!!
- ip: 218.28.164.* 2008-4-9 9:53:31 回复该留言
- ◇ 18.老萨
- 只能本机调试通过,虚拟空间是不行的。
- ip: 60.1.51.* 2008-7-6 21:34:12 回复该留言
- ◇ 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 回复该留言
本站采用创作共用版权协议, 要求署名、非商业用途和保持一致. 转载本站内容必须也遵循“署名-非商业用途-保持一致”的创作共用协议.
This site is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License.