Addcontact.asp和listcontact.asp中都包括相當數量的與XML相關的代碼,用來存取和讀contacts.xml文檔。
Lib_exml.asp包含這個應用程序使用的兩個關鍵函數,它們是OpenEXML()和 SaveEXML()。這裡列出它們的詳細內容。
OpenEXML()
首先聲明函數,用dim聲明變量,並例示我們需要的對象:
'Returns strResult as String, "" if successful 'Returns xmldom object in xmldom parameter 'Takes filepath as a relative path to the encrypted XML file 'Takes password as the password to use to decrypt the EXML file Function OpenEXML(xmldom, filepath, password) Dim CM Dim Context Dim key Dim objXML Dim objFSO Dim clearfile Dim strResult 'Instantiate Objects Set CM = Server.CreateObject("Persits.CryptoManager") Set Context = CM.OpenContext("mycontainer", True) Set objXML = Server.CreateObject("Microsoft.XMLDOM") Set objFSO = Server.CreateObject("Scripting.FileSystemObject")
然後,我們將提供的文件名解密到一個臨時文件中,這個文件在最後將要刪除。注意由於系統上有這個明碼文件,即使很簡短,我們的系統安全也有了一個漏洞。在樣本應用程序中的這些函數的目的是概念上的一個安全保證,但並不是一個完全的安全文件管理應用程序。
strResult = "" clearfile = Server.MapPath(filepath & ".clear") 'Get cryptographic key Set key = Context.GenerateKeyFromPassword(password, calgSHA, calgRC4, 40) key.DecryptFile Server.MapPath(filepath), clearfile
現在我們正在使用40位的密碼系統,如果你的機器上安裝了適當的API,那麼你可以使用更強大的密碼系統。簡單地說,如果你有IE的128位安全升級,你就可以通過AspEncrypt使用128位的密碼 系統。
存儲了加密文件後,我們用標准XMLDOM 代碼打開它,處理差錯然後刪除解密的文件:
'Processor should validate this document objXML.validateOnParse=True objXML.async = false 'Load the decrypted file into an XML Document objXML.load clearfile If Err.Number <> 0 Then strResult = strResult & "Error loading " & clearfile _ & " into XML object.<BR>" strResult = strResult & Err.Number & ": " & Err.Description & "<BR>" Exit Function End If 'Delete the decrypted file objFSO.DeleteFile clearfile, True If Err.Number <> 0 Then strResult = strResult & "Cannot delete file '" & clearfile _ & "'" & "<BR>" strResult = strResult & Err.Number & ": " & Err.Description & "<BR>" Exit Function End If
最後,我們清除對象,結束函數。XML文檔在xmldom 參數中被返回調用它的程序。如果有錯誤,就作為函數的返回字符串報告,如果操作成功的話這個字符串是個空字符串。
'Clean up objects Set CM = Nothing Set Context = Nothing Set Key = Nothing Set objFSO = Nothing If Err <> 0 Then strResult = strResult & Err.Number & ": " & Err.Description & "<BR>" End If Set xmldom = objXML OpenEXML = strResult End Function