• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
    • 軟件測試技術
    • 軟件測試博客
    • 軟件測試視頻
    • 開源軟件測試技術
    • 軟件測試論壇
    • 軟件測試沙龍
    • 軟件測試資料下載
    • 軟件測試雜志
    • 軟件測試人才招聘
      暫時沒有公告

    字號: | 推薦給好友 上一篇 | 下一篇

    對Windows網絡權限機制的改進

    發布: 2007-7-14 20:28 | 作者: 佚名    | 來源: 網絡轉載     | 查看: 16次 | 進入軟件測試論壇討論

    領測軟件測試網 康帕斯(中國)國際信息服務有限公司 馬文騫  

    無論是Win9x還是NT,甚至是最新的Win2000,Windows的網絡共享權限始終僅能作用于驅動器級和文件夾級,缺乏象UNIX那樣的文件級訪問權限使得Windows在網絡資源管理的功能上始終不能盡善盡美。本文給出了完善 Windows網絡共享機制的設計思想,以及實現該設計的示例程序。這種擴充的機制在提高網絡安全性及靈活性方面有廣泛的應用。
    一、網絡共享權限的擴充機制
    Windows 的網絡共享權限有三種:“只讀”、“完全”和“根據密碼訪問”。但這種權限并不能作用于單獨的文件。這就給具體的網絡應用帶來了很大的局限性。
    通過在服務器端及各個客戶端加裝 Client/Server形式的應用,可以有效地改進這種狀況。其中服務器上的管理程序負責維護和校驗客戶權限,并對符合權限要求的客戶請求提供服務。這些請求一般包括:下載服務器上的文件,將本地文件上傳至服務器的指定位置,修改、移動或刪除服務器上的文件,等等。
    下面的示例程序給出了這種擴充機制的一個具體實現,即“上傳文件”。一個遠程客戶即使在 Windows級不擁有服務器上某文件夾的“寫”權限(甚至連“讀”的權限也沒有),但只要他在擴充機制中擁有該文件夾中某文件的“寫”權限,他依然可以上傳該文件。
    1. 客戶程序(Client)
    下圖是客戶程序的外觀及執行情況。在填入正確的用戶名和密碼后,遠程用戶成功上傳了 Logow.sys文件。這次文件覆蓋操作將導致服務器關機畫面的改變。由于上述文件存在于服務器的系統目錄(\Windows或\WinNT)下,將整個文件夾的“寫”權限在 Windows級共享給某用戶是非常危險的,因此上述擴充機制很好地化解了風險。


    客戶程序源代碼如下(VB 6.0):
    Option Explicit
    Dim BlockSize As Integer
    Private Sub cmdConnect_Click()
    If tcpClient.State <> sckClosed Then tcpClient.Close
    tcpClient.RemoteHost = txtIP.Text
    tcpClient.RemotePort = 1001
    tcpClient.Connect ' 連接到服務器
    End Sub
      
    Private Sub cmdDisconnect_Click()
    tcpClient.SendData "Close" ' 關閉連接
    cmdConnect.Enabled = True
    cmdUpload.Enabled = False
    cmdDisconnect.Enabled = False
    End Sub
      
    Private Sub cmdUpload_Click()
    ' 發送用戶名和密碼(為簡單起見,未做加密)
    tcpClient.SendData "ID:" + txtName + "|PASS:" + txtPass
    frmClient.MousePointer = 11
    End Sub
      
    Private Sub tcpClient_DataArrival(ByVal bytesTotal As Long)
    Static FileID As Integer, Cur_Pos As Long, FileLen As Long
    Dim strData As String, j As Long
    Dim Buf() As Byte
    tcpClient.GetData strData
    Select Case strData
    Case "Connect OK" ' 收到連接成功的通知
    cmdConnect.Enabled = False
    cmdUpload.Enabled = True
    cmdDisconnect.Enabled = True
    Case "User Check Passed" ' 用戶權限驗證
    tcpClient.SendData "File:" + txtDestination
    Case "Please Upload File" ' 開始上傳文件
    If Dir$(txtSource) <> "" Then
    FileID = FreeFile
    Open txtSource For Binary As #FileID
    FileLen = LOF(FileID)
    If FileLen > 3072 Then
    BlockSize = 3072
    Else
    BlockSize = FileLen ' 若文件小于3K,則一次發送完成
    End If
    ReDim Buf(1 To BlockSize) As Byte
    Get #FileID, , Buf
    tcpClient.SendData Buf
    Cur_Pos = BlockSize
    End If
    Case "Next Block" ' 傳送文件的后續塊
    If Cur_Pos = FileLen Then
    tcpClient.SendData "End"
    Close FileID ' 上傳完成
    frmClient.Caption = "TCP Client Upload " + Trim(Str(FileLen)) + " bytes"
    frmClient.MousePointer = 0
    Exit Sub
    End If
    j = Cur_Pos + BlockSize
    If j > FileLen Then
    j = FileLen - Cur_Pos
    Else
    j = BlockSize
    End If
    ReDim Buf(1 To j) As Byte
    Get #FileID, , Buf
    tcpClient.SendData Buf
    Cur_Pos = Cur_Pos + j
    frmClient.Caption = "TCP Client " + Trim(Str(Cur_Pos)) + " Bytes Uploaded."
    End Select
    End Sub
    2. 服務器上的管理/服務程序(Server)
    Option Explicit
    Dim FileName As String
      
    Private Sub Form_Load()
    tcpServer.LocalPort = 1001
    tcpServer.Listen ' 監聽用戶登錄申請
    End Sub
      
    Private Sub tcpServer_ConnectionRequest(ByVal requestID As Long)
    If tcpServer.State <> sckClosed Then tcpServer.Close
    tcpServer.Accept requestID
    tcpServer.SendData "Connect OK"
    End Sub
      
    Private Sub tcpServer_DataArrival(ByVal bytesTotal As Long)
    Static FileID As Integer
    Dim strData As String, j As Long
    Dim Buf() As Byte
    ReDim Buf(bytesTotal) As Byte
    tcpServer.GetData Buf
    ' 收到斷開登錄的申請
    If Chr(Buf(0)) = "C" And Chr(Buf(1)) = "l" Then
    tcpServer.Close
    tcpServer.LocalPort = 1001
    tcpServer.Listen
    Exit Sub
    End If
    ' 收到用戶名及密碼
    If Chr(Buf(0)) = "I" And Chr(Buf(1)) = "D" Then
    strData = ""
    For j = 0 To bytesTotal - 1
    strData = strData + Chr(Buf(j))
    Next
    If Mid$(strData, 4, InStr(4, strData, "|") - 4) = "Kompass" And _
    Mid$(strData, InStr(4, strData, "|") + 6) = "ReedInfo" Then
    tcpServer.SendData "User Check Passed"
    End If
    Exit Sub
    End If
    ' 收到目標文件名
    If Chr(Buf(0)) = "F" And Chr(Buf(1)) = "i" Then
    FileName = ""
    For j = 5 To bytesTotal - 1
    FileName = FileName + Chr(Buf(j))
    Next
    ' 為簡單起見,未做“同名確認”操作
    If Dir$(FileName) <> "" Then Kill FileName
    FileID = FreeFile
    Open FileName For Binary As #FileID
    tcpServer.SendData "Please Upload File"
    Exit Sub
    End If
    ' 收到文件傳送完畢的通知
    If Chr(Buf(0)) = "E" And Chr(Buf(1)) = "n" Then
    Close #FileID
    Exit Sub
    End If
    ' 收到文件(二進制形式)的一塊,并申請下一塊
    Put #FileID, , Buf
    tcpServer.SendData "Next Block"
    End Sub
    二、擴充機制的進一步說明
    第一,數據庫的使用。上述服務器端的示例程序只是象征性地驗證了一下遠程用戶的身份,而在真實的應用環境中應使用數據庫來管理“用戶名/密碼/資源/權限”這四者的關系。
    第二,與現有機制相配合。本文的擴充機制并不依賴于 Windows現有的權限機制。即使在 Windows下所有的資源共享都被關閉時(即所有資源均不共享),上述擴充機制仍能獨立發揮作用。但如果與現有機制巧妙地配合,擴充機制可大大減少程序量。
    第三,控件數組的使用。服務器端的示例程序僅使用了一個 Winsock控件進行通訊,而在真實的使用環境中應將之改為 Winsock控件數組來應付多用戶的同時訪問。
    第四,對 UNIX 方式的模擬。進一步完善擴充機制以實現UNIX式的權限管理也并非難事。這種更豐富、更靈活的權限管理機制在較大型局域網中有著廣泛的應用。

    延伸閱讀

    文章來源于領測軟件測試網 http://www.kjueaiud.com/


    關于領測軟件測試網 | 領測軟件測試網合作伙伴 | 廣告服務 | 投稿指南 | 聯系我們 | 網站地圖 | 友情鏈接
    版權所有(C) 2003-2010 TestAge(領測軟件測試網)|領測國際科技(北京)有限公司|軟件測試工程師培訓網 All Rights Reserved
    北京市海淀區中關村南大街9號北京理工科技大廈1402室 京ICP備10010545號-5
    技術支持和業務聯系:info@testage.com.cn 電話:010-51297073

    軟件測試 | 領測國際ISTQBISTQB官網TMMiTMMi認證國際軟件測試工程師認證領測軟件測試網

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>