Hạn chế quyền truy nhập trên qile

Một phần của tài liệu slike bài giảng lập trình an toàn lương ánh hoàng (Trang 39 - 44)

• Các quyền truy nhập

2.5  Hạn chế quyền truy nhập trên qile

•  Tiến  trình  muốn  kiểm  soát  truy  nhập  trên  một  phần  của  }ile  hay  toàn   bộ  }ile  để  tránh  xung  đột  khi  có  nhiều  tiến  trình  cùng  truy    nhập  trên   }ile.  

•  Unix/Linux  cung  cấp  cơ  chế  khóa  mềm:  Mọi  tiến  trình  đều  có  quyền   giành  được  khóa  và  thao  tác  trên  }ile,  tuy  nhiên  không  phải  tiến  trình   nào  cũng  tuân  thủ  theo  khóa  và  có  thể  phá  hỏng  dữ  liệu  của  tiến  trình   khác.  

•  Windows  thực  hiện  vấn  đề  này  tốt  hơn  bằng  khóa  cứng.  Có  hai  loại   khóa:  

•  Shared  Lock:  Cho  phép  các  tiến  trình  khác  (kể  cả  tiến  trình  giành  được   khóa)  đọc  nhưng  không  được  ghi  vào  một  phần  đã  khóa  của  }ile.    

•  Exclusive  Lock  :  Cấm  tất  cả  các  tiến  trình  khác  không  được  đọc  hay  ghi  vào   phần  đã  khóa  của  }ile.  Tiến  trình  giành  được  khóa  có  quyền  đọc  hoặc  ghi  

•  Các  hàm  khóa  }ile  trên  Windows  

•  LockFile,  UnlockFile:  Khóa  và  mở  khóa  đồng  bộ,  sẽ  không  trở  về  đến  khi   giành  được  khóa  hoặc  mở  được  khóa.  

•  LockFileEx,  UnlockFileEx:  Khóa  và  mở  khóa  đồng  bộ  hoặc  bất  đồng  bộ.  

•  Khóa  }ile  cũng  có  thể  xác  định  lúc  tạo  lập/truy  nhập  }ile  thông  qua  hàm   CreateFile.  

•  Đoạn  chương  trình  sau  sẽ  mở  một  }ile  để  đọc  với  chế  độ  Shared  Lock.  

 char  buff[1024];    DWORD  bytesRead  =  0;    HANDLE  fileHandle  =  NULL;  

 fileHandle  =  CreateFile(L"C:\\SecureProgramming\\Test.txt",          GENERIC_READ|GENERIC_WRITE,          FILE_SHARE_READ|FILE_SHARE_WRITE,          0,          OPEN_ALWAYS,          FILE_ATTRIBUTE_NORMAL,          0);   2.6  Khóa  qile  

•  VD  (tiếp)  

 ReadFile(fileHandle,buff,128,&bytesRead,0);    buff[bytesRead]  =  0;  

 printf("File  content:%s\n",buff);  

 LockFile(fileHandle,0,0,100,0);  //  Exclusive  Lock  

 printf("File  is  locked,  press  any  key  to  unlock...\n");      getch();  

 UnlockFile(fileHandle,0,0,100,0);    printf("File  is  unlocked\n");  

 getch();  

 CloseHandle(fileHandle);  

   

•  Ứng  dụng  tạo  }ile  tạm  để  lưu  trữ  thông  tin  tạm  thời  của  chương  trình.  

•  File  tạm  nên  được  tạo  lập  một  cách  an  toàn,  và  xóa  khi  kết  thúc  chương   trình.  

•  Trên  unix/linux:  

•  Hàm  mkstemp()  có  thể  sử  dụng  để  tạo  }ile  tạm  với  tên  ngẫu  nhiên.  

•  Ứng  dụng  cần  xóa  }ile  theo  tên,  ngay  sau  lời  gọi  mkstemp  để  đảm  bảo  không  tiến   trình  nào  truy  nhập  được.  

•  Sau  khi  tiến  trình  kết  thúc  một  cách  bình  thường/không  bình  thường,  }ile  tạm  sẽ   không  thể  truy  nhập  được  nữa.  

•  VD  

 char    szPath[]  =  “fileXXXXXX";    int  fd;    

 fd  =  mkstemp(szPath);    unlink(szPath);  

 printf("Temperary  file  created,  press  any  key  to  continue...");    write(fd,"Hello",5);  

 close(fd);  

•  Trên  Windows:  

•  Không  có  hàm  tương  đương  mkstemp()  

•  GetTempFileName()  sinh  tên  }ile  ngẫu  nhiên  nhưng  dễ  đoán.  

•  GetTempPath()  lấy  đường  dẫn  đến  thư  mục  tạm  của  người  dùng  hiện  tại.  

•  Tạo  }ile  bằng  hàm  CreateFile  với  hai  thuộc  tính  FILE_ATTRIBUTE_TEMPORARY  và  

Một phần của tài liệu slike bài giảng lập trình an toàn lương ánh hoàng (Trang 39 - 44)

Tải bản đầy đủ (PDF)

(131 trang)