Tìm hiểu về “sitekey” trong NukeViet

Thứ năm - 08/10/2015 05:16
Mỗi website cần có một "key" được tạo ra ngẫu nhiên, và là duy nhất cho mỗi lần cài đặt. NukeViet sử dụng sitekey để nâng cáo mức độ bảo mật thông tin.
Sử dụng NukeViet, chắc hẳn ai cũng đã nghe đến Sitekey - một biến của hệ thống. Vậy sitekey là gì? Sử dụng sitekey để làm gì, trong trường hợp nào?....... Với kiến thức có được, mình xin trình bày một số ý nhằm giúp các bạn hiểu rõ hơn về biến này.

Sitekey là gì?

Hãy hình dung, mỗi một ổ khóa đều có một chìa khóa riêng biệt, có chìa khóa mới mở đuợc ổ khóa, xem được những thứ bên trong. Trong NukeViet, một website được xem như là ổ khóa, và sitekey là chìa khóa mở ổ khóa đó. Sitekey là một chuỗi chứa một số thông tin hệ thống, được mã hóa md5. Làm nhiệm vụ kết hợp để mã hóa các thông tin quan trọng. (Xem phương thức tạo ra sitekey bên dưới).

Sitekey được tạo ra như thế nào?

Bắt đầu quá trình cài đặt NukeViet, hệ thống tự động sinh ra một chuỗi, sau đó mã hóa md5 chuỗ này. Giá trị này được lưu vào file /config.php và biến $global_config['sitekey']. Do đó, nếu website bạn cài mới, giá trị này luôn khác nhau (không website nào giống website nào), đo đó bạn không nên thay đổi giá trị sitekey.

Cấu trúc:
$_SERVER['SERVER_NAME'] . NV_ROOTDIR . $client_info['session_id']
Trong đó:
  • $_SERVER['SERVER_NAME']: Tên máy chủ đang chạy (domain)
  • NV_ROOTDIR: Đường dẫn đến thư mục gốc
  • $client_info['session_id']: Thực chất là gía trị của hàm session_id()

Sử dụng sitekey trong trường hợp nào?

Một trường hợp đơn giản. Mình viết code xóa một bản ghi:
if( $nv_Request->isset_request( 'delete', 'get' ) )
{
	$id = $nv_Request->isset_int( 'id', 'get', 0 );	// Code xóa bản ghi ở đây....
}
Không xét đến việc kiểm tra quyền hạn (vì một lý do nào đó việc này vô tác dụng), việc tấn công từ bên ngoài bằng cách gửi request chứa deleteid là có thể khai thác được hê thống, cụ thể ở đây là việc xóa bản ghi bất hợp pháp.

Và đây là code xóa, có sử dụng sitekey
if( $nv_Request->isset_request( 'delete', 'get' ) )
{
	$id = $nv_Request->isset_int( 'id', 'get', 0 );
	$checkss = $nv_Request->isset_request( 'checkss', 'get' );
	if( $checkss == md5( $global_config['sitekey'] . '_' . $client_info['session_id'] . '_' . $id ) )
	{
		// Code xóa bản ghi ở đây....
	}
}
Với việc sử dụng $checkss (là chuỗi mã hóa md5 của sitekey và id bản ghi cần xóa) để đối chiếu, thì khả năng xóa bản ghi bất hợp phát như bên trên gần như không thể, trong trường hợp không biết chính xác sitekey của website là gì. Cụ thể là, muốn xóa một bản ghi, cần phải truyền vào tham số checkss, id bản ghi, đối chiếu hợp lệ rồi mới xóa. Bạn có thể tìm trong source của NukeViet với từ khóa sitekey, có rất nhiều đoạn code sử dụng phương án này, với mục đích tương tự.

Việc sử dụng các bản "full source" chia sẽ từ các nguồn khác nhau khiến website của bạn không an toàn, tiềm ẩn các nguy cơ bị tấn công cao,... như việc tạo ra một loạt các website có sitekey giống nhau, hay là các hành động khai thác cửa hậu như cài shell,... Do đó, việc sử dụng các gói website thế này là không nên.

Tổng số điểm của bài viết là: 5 trong 1 đánh giá

Xếp hạng: 5 - 1 phiếu bầu
Click để đánh giá bài viết

  Ý kiến bạn đọc

Trung tâm ứng dụng NukeViet
Ghi rõ nguồn khi sao chép thông tin từ website này.

Powered by NukeViet - a product of VINADES.,JSC