无组件上传中禁止ASP木马上传代码,ASP下测试通过(原创)
Filed Under (ASP茶座) by 有为 on 03-09-2009
Function CheckASP(Byval sFileName)
dim FStream,stamp,sData
Set FStream=Server.createobject(”ADODB.Stream”)
FStream.Open
FStream.Type=1
FStream.LoadFromFile sFileName
FStream.position=0
stamp=FStream.read
sData = ByteArray2Text( stamp )
If SniffHtml( sData ) Then
FStream.Close
Set FStream=nothing
CheckASP = true
EXIT Function
End If
If SniffASP( sData ) Then
FStream.Close
Set FStream=nothing
CheckASP = true
EXIT Function
End If
FStream.Close
Set FStream=nothing
If err.number<>0 then return = true
CheckASP = false
End Function
Private Function SniffHtml( sData )
Dim oRE
Set oRE = New RegExp
oRE.IgnoreCase = True
oRE.Global = True
Dim aPatterns
aPatterns = Array( “<!DOCTYPE\W*X?HTML”, “<(body|head|html|img|pre|script|table|title)”, “type\s*=\s*[\'""]?\s*(?:\w*/)?(?:ecma|java)”, “(?:href|src|data)\s*=\s*[\'""]?\s*(?:ecma|java)script:”, “url\s*\(\s*[\'""]?\s*(?:ecma|java)script:” )
Dim i
For i = 0 to UBound( aPatterns )
oRE.Pattern = aPatterns( i )
If oRE.Test( sData ) Then
SniffHtml = True
Exit Function
End If
Next
SniffHtml = False
End Function
Private Function SniffASP( sData )
Dim oRE
Set oRE = New RegExp
oRE.IgnoreCase = True
oRE.Global = True
Dim aPatterns
aPatterns = Array(”.(getfolder|createfolder|deletefolder|createdirectory|deletedirectory|saveas)”,”wscript.shell”,”script.encode”,”server.”,”.createobject”,”execute”,”activexobject”,”language=”,”request”,”server”,”script”)
Dim i
For i = 0 to UBound( aPatterns )
oRE.Pattern = aPatterns( i )
If oRE.Test( sData ) Then
SniffASP = true
Exit Function
End If
Next
SniffASP = false
End Function
Private Function ByteArray2Text(varByteArray)
Dim strData, strBuffer, lngCounter
strData = “”
strBuffer = “”
For lngCounter = 0 to UBound(varByteArray)
strBuffer = strBuffer & Chr(255 And Ascb(Midb(varByteArray,lngCounter + 1, 1)))
‘Keep strBuffer at 1k bytes maximum
If lngCounter Mod 1024 = 0 Then
strData = strData & strBuffer
strBuffer = “”
End If
Next
ByteArray2Text = strData & strBuffer
End Function
FCKeditor 2.6 禁止ASP木马上传浅谈
Filed Under (FCKeditor) by 有为 on 03-09-2009
1、上传类的SaveAs方法使用了一个SniffHtml方法检测上传的文件是否为html文件。查看该方法的代码,发现该方法能够使用正则表达式检测文件中是否存在特定的字符串,进而判断上传的文件是否为html文件。如果替换检测的特定字符串值,不就实现对上传木马的检测了吗?
2、检查调用SniffHtml的位置,该类使用私有的ByteArray2Text方法将上传的文件转换为text,然后该text值传给SniffHtml。
3、使用和SniffHtml同样的方法,即可以完成对危险字符串的检测呢?
修改方法
修改文件:class_upload.asp
1.添加SniffASP( sData )函数
Private Function SniffASP( sData )
Dim oRE
Set oRE = New RegExp
oRE.IgnoreCase = True
oRE.Global = True
Dim aPatterns
aPatterns = Array(”.(getfolder|createfolder|deletefolder|createdirectory|deletedirectory|saveas)”,”wscript.shell”,”script.encode”,”server.”,”.createobject”,”execute”,”activexobject”,”language=”,”request”,”server”,”script”)
Dim i
For i = 0 to UBound( aPatterns )
oRE.Pattern = aPatterns( i )
If oRE.Test( sData ) Then
SniffASP = true
Exit Function
End If
Next
SniffASP = false
End Function
2.修改SaveAs(sItem, sFileName)方法
Public Sub SaveAs(sItem, sFileName)
If File(sItem).Size < 1 Then
nErr = 2
Exit Sub
End If
If Not IsAllowed(File(sItem).Ext) Then
nErr = 4
Exit Sub
End If
If InStr( LCase( sFileName ), “::$data” ) > 0 Then
nErr = 4
Exit Sub
End If
Dim sFileExt, iFileSize
sFileExt = File(sItem).Ext
iFileSize = File(sItem).Size
‘ Check XSS.
If Not IsHtmlExtension( sFileExt ) Then
‘ Calculate the size of data to load (max 1Kb).
Dim iXSSSize
iXSSSize = iFileSize
If iXSSSize > 1024 Then
iXSSSize = 1024
End If
‘ Read the data.
Dim sData
oSourceData.Position = File(sItem).Start
sData = oSourceData.Read( iXSSSize ) ’ Byte Array
sData = ByteArray2Text( sData ) ’ String
‘ Sniff HTML data.
If SniffHtml( sData ) Then
nErr = 4
Exit Sub
End If
End If
If SniffASP( sData ) Then
nErr = 4
Exit Sub
End If
Dim oFileStream
Set oFileStream = Server.CreateObject(”ADODB.Stream”)
With oFileStream
.Type = 1
.Mode = 3
.Open
oSourceData.Position = File(sItem).Start
oSourceData.CopyTo oFileStream, File(sItem).Size
.Position = 0
.SaveToFile sFileName, 2
.Close
End With
Set oFileStream = Nothing
End Sub
FCKeditor 2.6 JS调用时设置属性值
Filed Under (FCKeditor) by 有为 on 28-08-2009
<script language=”JavaScript”>
<!–
var oFCKeditor = new FCKeditor(”FileContent”,”100%”,”400″);
oFCKeditor.BasePath=”../YW_editor/”;
oFCKeditor.Config['FullPage'] = true;
oFCKeditor.Config['EnterMode'] = ” ;
oFCKeditor.ReplaceTextarea() ;
//–>
</script>
FCKeditor V2.6 属性设置及优化–转
Filed Under (FCKeditor) by 有为 on 28-08-2009
FckEditor V2.6 fckconfig.js中文注释
1. FCKConfig.CustomConfigurationsPath = ” ; // 自定义配置文件路径和名称
2. FCKConfigFCKConfig.EditorAreaCSS = FCKConfig.BasePath + ‘css/fck_editorarea.css’; // 编辑区的样式表文件
3. FCKConfig.EditorAreaStyles = ” ; // 编辑区的样式表风格
4. FCKConfig.ToolbarComboPreviewCSS =”; //工具栏预览CSS
5. FCKConfig.DocType = ” ;//文档类型
6. FCKConfig.BaseHref = ”; // 相对链接的基地址
7. FCKConfig.FullPage = false ; //是否允许编辑整个HTML文件,还是仅允许编辑BODY间的内容
8. FCKConfig.StartupShowBlocks = false ;//决定是否启用”显示模块”
9. FCKConfig.Debug = false ;//是否开启调试功能
10. FCKConfigFCKConfig.SkinPath = FCKConfig.BasePath + ’skins/default/’ ; //皮肤路径
11. FCKConfig.PreloadImages=… //预装入的图片
12. FCKConfigFCKConfig.PluginsPath = FCKConfig.BasePath + ‘plugins/’ ; //插件路径
13. FCKConfig.AutoDetectLanguage = true ; //是否自动检测语言
14. FCKConfig.DefaultLanguage = ‘zh-cn’ ; //默认语言
15. FCKConfig.ContentLangDirection = ‘ltr’ ; //默认的文字方向,可选”ltr/rtl”,即从左到右或从右到左
16. FCKConfig.ProcessHTMLEntities = true ; //处理HTML实体
17. FCKConfig.IncludeLatinEntities = true ; //包括拉丁文
18. FCKConfig.IncludeGreekEntities = true ;//包括希腊文
19. FCKConfig.ProcessNumericEntities = false ;//处理数字实体
20. FCKConfig.AdditionalNumericEntities = ” ; //附加的数字实体
21. FCKConfig.FillEmptyBlocks = true ; //是否填充空块
22. FCKConfig.FormatSource = true ; //在切换到代码视图时是否自动格式化代码
23. FCKConfig.FormatOutput = true ; //当输出内容时是否自动格式化代码
24. FCKConfig.FormatIndentator = ‘ ‘ ; //当在源码格式下缩进代码使用的字符
25. FCKConfig.StartupFocus = false ; //开启时焦点是否到编辑器,即打开页面时光标是否停留在fckeditor上
26. FCKConfig.ForcePasteAsPlainText = false ; //是否强制粘贴为纯文件内容
27. FCKConfig.AutoDetectPasteFromWord = true ; //是否自动探测从word粘贴文件,仅支持IE
28. FCKConfig.ShowDropDialog = true ;//是否显示下拉菜单
29. FCKConfig.ForceSimpleAmpersand = false ;//是否不把&符号转换为XML实体
30. FCKConfig.TabSpaces = 0 ;//按下Tab键时光标跳格数,默认值为零为不跳格
31. FCKConfig.ShowBorders = true ;//合并边框
32. FCKConfig.SourcePopup = false ;//弹出
33. FCKConfig.ToolbarStartExpanded = true ;//启动fckeditor工具栏默认是否展开
34. FCKConfig.ToolbarCanCollapse = true ;//是否允许折叠或展开工具栏
35. FCKConfig.IgnoreEmptyParagraphValue = true ;//是否忽略空的段落值
36. FCKConfig.FloatingPanelsZIndex = 10000 ;//浮动面板索引
37. FCKConfig.HtmlEncodeOutput = false ;//是否将HTML编码输出
38. FCKConfig.TemplateReplaceAll = true ;//是否替换所有模板
39. FCKConfig.ToolbarLocation = ‘In’ ;//工具栏位置,
40. FCKConfig.CustomConfigurationsPath = ” ; // 自定义配置文件路径和名称
41. FCKConfigFCKConfig.EditorAreaCSS = FCKConfig.BasePath + ‘css/fck_editorarea.css’; // 编辑区的样式表文件
42. FCKConfig.BaseHref = ”; // 相对链接的基地址
43. FCKConfig.Debug = true/false; // 是否开启调试功能,当调用FCKDebug.Output()时,会在调试窗中输出内容
44. FCKConfigFCKConfig.SkinPath = FCKConfig.BasePath + ’skins/default/’; // 设置皮肤
45. FCKConfig.AutoDetectLanguage = true/false ; // 是否自动检测语言
46. FCKConfig.DefaultLanguage = ‘zh-cn’ ; // 设置默认语言
47. FCKConfig.ContentLangDirection = ‘ltr/rtr’; // 默认文字方向,ltr左,rtr右
48. FCKConfig.FillEmptyBlocks = true/false ; // 使用这个功能,可以将空的块级元素用空格来替代
49. FCKConfig.FormatSource = true/false; // 切换到代码视图时,是否自动格式化代码
50. FCKConfig.FormatOutput = true/false; // 当输出内容时是否自动格式化代码
51. FCKConfig.FormatIndentator = “”; // 当在“源码格式”下缩进代码使用的字符
52. FCKConfig.GeckoUseSPAN = true/false; // 是否允许SPAN标记代替B,I,U标记
53. FCKConfig.StartupFocus = true/false; // 开启时是否FOCUS到编辑器
54. FCKConfig.ForcePasteAsPlainText = true/false;// 强制粘贴为纯文本
55. FCKConfig.ForceSimpleAmpersand = true/false; // 是否不把&符号转换为XML实体
56. FCKConfig.TabSpaces = 0/1; // TAB是否有效
57. FCKConfig.TabSpaces = 4; // TAB键产生的空格字符数
58. FCKConfig.ShowBorders = true/false; // 是否合并边框
59. FCKConfig.ToolbarStartExpanded = true/false; // 页面载入时,工具栏是否展开,点“展开工具栏”时才出现
60. FCKConfig.ToolBarCanCollapse = true/false; // 是否允许展开折叠工具栏
61. FCKConfig.ToolbarSets = object ; // 编辑器的工具栏,可以自行定义,删减,可参考已存在工具栏
62. FCKConfig.EnterMode = ‘p’; // 编辑器中直接回车,在代码中生成,可选为p | div | br
63. FCKConfig.ShiftEnterMode = ‘br’; // 编辑器中Shift+回车,在代码中生成,可选为p | div | br
64. FCKConfig.ContextMenu = 字符串数组; // 右键菜单的内容
65. FCKConfig.FontColors = “”; // 文字颜色列表
66. FCKConfig.FontNames = “”; // 字体列表
67. FCKConfig.FontSizes = “”; // 字号列表
68. FCKConfig.FontFormats = “”; // 文字格式列表
69. FCKConfig.StylesXmlPath = “”; // CSS样式列表的XML文件的位置
70. FCKConfig.TemplatesXmlPath = “”; // 模版的XML文件位置
71. FCKConfig.SpellChecker = “ieSpell/Spellerpages”; // 拼写检查器
72. FCKConfig.IeSpellDownloadUrl = “”; // 下载拼写检查器的网址
73. FCKConfigFCKConfig.SmileyPath = FCKConfig.BasePath + ‘images/smiley/msn/’; // 表情文件存放路径
74. FCKConfig.SmileyImages = ”; // 表情文件名称列表,具体参考默认设置
75. FCKConfig.SmileyColumns = 8; // 表情窗口显示表情列数
76. FCKConfig.SmileyWindowWidth = 320; // 表情窗口显示宽度,此窗口会因为表情文件的改变而作调整
77. FCKConfig.SmileyWindowHeight = 240; // 表情窗口显示高度,此窗口会因为表情文件的改变而作调整
78. FCKConfig.FullPage = true/false; // 是否允许编辑整个HTML文件,还是仅允许编辑BODY间的内容
79.
80.
81. 上传设置
82.
83. var _FileBrowserLanguage = ‘php’ ; // asp | aspx | cfm | lasso | perl | php | py
84. var _QuickUploadLanguage = ‘php’ ; // asp | aspx | cfm | lasso | php[/code]
85. //第一个是文件浏览器使用的语言,第二个快速上传使用的语言,改成你需要的
86. FCKConfig.LinkUploadAllowedExtensions = "" ; // empty for all
87. FCKConfig.LinkUploadDeniedExtensions =".(php|php3|php5|phtml|asp|aspx|ascx|jsp|cfm|cfc|pl|bat|exe|dll|reg|cgi)$"
88. //这是两个允许和拒绝上传的文件类型列表
89. FCKConfig.ImageBrowser = false ;是否在插入图片功能里面启用服务器文件浏览功能
90. FCKConfigFCKConfig.ImageBrowserURL = FCKConfig.BasePath + 'filemanager/browser/default/browser.html?Type=ImageConnector=connectors/' + _FileBrowserLanguage + '/connector.' + _FileBrowserExtension ;
91. Type=Image 表示文件类型是image这会使文件浏览器定位到文件上传路径/image/文件夹下面
92. FCKConfig.FlashBrowser = false ;是否在插入flash功能中启用服务器文件浏览功能
93. FCKConfig.LinkUpload = false ;是否启用插入链接的快速上传功能
94. FCKConfig.ImageUpload = false ;是否启用图片快速上传功能
95. FCKConfig.FlashUpload = false ;是否启用flash上传功能 « 阅读全文 »

