banner

[Rule] Rules  [Home] Main Forum  [Portal] Portal  
[Members] Member Listing  [Statistics] Statistics  [Search] Search  [Reading Room] Reading Room 
[Register] Register  
[Login] Loginhttp  | https  ]
 
Forum Index Thảo luận bảo mật Bảo đảm toàn vẹn dữ liệu  XML
  [Discussion]   Bảo đảm toàn vẹn dữ liệu 12/02/2010 18:22:22 (+0700) | #1 | 204957
beta14
Member

[Minus]    0    [Plus]
Joined: 12/02/2010 05:17:58
Messages: 10
Offline
[Profile] [PM]
Chào mọi người.

Mình đang tập làm 1 module bảo mật cho dữ liệu chứa trong MySQL và chạy bằng PHP.

Dữ liệu:
1) Có bảng chứa tài khoản người dùng: USERS bao gồm: user_id, user_name, user_pass, user_auth...
2) Bảng AUTH chứ danh sách cấp bậc của USERS: auth_id, auth_type, user_id,....

Vấn đề đặt ra là:
1) Có người xâm nhập vào MySQL như bị local attack
2) Người này sửa user_auth của user nào đó thành 1, tức thành Quản trị

Giải pháp nào cho:
1) Có thể bị mất database, bị sửa MySQL trái phép từ ngoài.
2) Tuy nhiên, nếu sửa lại user_auth thành Quản trị thì cũng không được gì.

Ở trường hợp này, tính toàn vẹn của dữ liệu trong bảng đã không hợp lệ. Vậy có giải pháp nào để đảm bảo tính toán vẹn đó?

Thân chào.
[Up] [Print Copy]
  [Discussion]   Bảo đảm toàn vẹn dữ liệu 12/02/2010 20:58:57 (+0700) | #2 | 204973
myquartz
Member

[Minus]    0    [Plus]
Joined: 04/01/2005 04:58:30
Messages: 563
Offline
[Profile] [PM]
Có một cách đơn giản, mà hiệu quả. Đó là hardcode trong chương trình, if(user_name = 'admin' )thì là có quyền quản trị.
Vậy là xong, có sửa dữ liệu cũng không có giá trị gì. Tất nhiên, password của user admin thì cũng phải hardcode ... nốt.
[Up] [Print Copy]
  [Discussion]   Bảo đảm toàn vẹn dữ liệu 13/02/2010 00:06:48 (+0700) | #3 | 204982
beta14
Member

[Minus]    0    [Plus]
Joined: 12/02/2010 05:17:58
Messages: 10
Offline
[Profile] [PM]
Cách này mình cũng đã nghĩ đến, nhưng nó khá thiển cận và không bao quát nếu: site có nhiều admin, ngoài ra còn có super mod và mod...
[Up] [Print Copy]
  [Discussion]   Bảo đảm toàn vẹn dữ liệu 14/02/2010 07:33:58 (+0700) | #4 | 205027
[Avatar]
WinDak
Researcher

Joined: 27/01/2002 11:15:00
Messages: 223
Offline
[Profile] [PM]
Nếu muốn flexible hơn thì bạn có thể tạo danh sách admin/supermod/supmod vào file riêng, rồi đọc file đó mỗi lần check authentication.

Nhưng mình không hiểu bạn hỏi phương pháp này làm gì, vì attacker đã vào được database rồi thì còn chống vào admin làm gì nữa ? ngoài ra attacker vẫn có thể thay password, sửa username v.v.. để vào.
-- w~ --
[Up] [Print Copy]
  [Discussion]   Bảo đảm toàn vẹn dữ liệu 14/02/2010 16:05:31 (+0700) | #5 | 205036
beta14
Member

[Minus]    0    [Plus]
Joined: 12/02/2010 05:17:58
Messages: 10
Offline
[Profile] [PM]
Giải pháp bạn đưa ra khá flexible , nhưng bạn lại chưa hiểu vấn đề chính mà tôi muốn đưa ra. Thay đổi user_auth chỉ là 1 ví dụ nhỏ, như bạn đã nêu, tính toàn vẹn phải được giữ để nếu có bị thay đổi username hoặc password thì cũng không thể chiếm được tài khoản cấp cao.

Ví dụ như tôi thấy forum hva có tài khoản tên là quanlytruong. Nếu ngày nào đó MySQL bị lỗi có thể bị khai thác. Với cấu trúc database của JForum thì hoàn toàn có thể chiến tài khoản cấp cao đó để phá hoại forum. Vậy người modify JFroum cho HVA có đảm bảo được tính toàn vẹn đó không?
[Up] [Print Copy]
  [Discussion]   Bảo đảm toàn vẹn dữ liệu 14/02/2010 21:52:11 (+0700) | #6 | 205048
[Avatar]
WinDak
Researcher

Joined: 27/01/2002 11:15:00
Messages: 223
Offline
[Profile] [PM]
Vấn đề bạn đưa ra chưa rõ ràng nên mình cũng không biết suy nghĩ như thế nào là chính xác

Theo mình hiểu thì vấn đề ở đây là bạn giả định Mysql bị lỗi và attacker có toàn quyền đối với database system. Như vậy JForum hay bất cứ application nào chạy trên nền database này đều có thể bị ảnh hưởng và điều khiển theo ý của attacker. Do đó theo logic, nếu bạn vẫn muốn bảo toàn authentication thì chỉ có cách là sử dụng một lớp bảo vệ khác không có dính dáng đến database ( i.e attacker không thể manipulate ) ví dụ như file system như mình đã đề cập.

wd.
-- w~ --
[Up] [Print Copy]
  [Discussion]   Bảo đảm toàn vẹn dữ liệu 16/02/2010 21:58:20 (+0700) | #7 | 205099
cvhainb
Member

[Minus]    0    [Plus]
Joined: 04/01/2007 14:32:38
Messages: 251
Offline
[Profile] [PM]

beta14 wrote:
Giải pháp bạn đưa ra khá flexible , nhưng bạn lại chưa hiểu vấn đề chính mà tôi muốn đưa ra. Thay đổi user_auth chỉ là 1 ví dụ nhỏ, như bạn đã nêu, tính toàn vẹn phải được giữ để nếu có bị thay đổi username hoặc password thì cũng không thể chiếm được tài khoản cấp cao.

Ví dụ như tôi thấy forum hva có tài khoản tên là quanlytruong. Nếu ngày nào đó MySQL bị lỗi có thể bị khai thác. Với cấu trúc database của JForum thì hoàn toàn có thể chiến tài khoản cấp cao đó để phá hoại forum. Vậy người modify JFroum cho HVA có đảm bảo được tính toàn vẹn đó không? 


Có phải bạn hỏi là: Không được thay đổi cấu trúc, dữ liệu từ phpMyAdmin ? Nếu đúng thì vấn đề của bạn là bất khả thi vì một khi đã vào được phpMyAdmin thì mọi cái đều có thể rồi. Cái chính là cái account đăng nhập vào phpMyAdmin là loại nào thôi.

Còn nếu người chiếm quyền biết khá chi tiết về cái db đó thì mọi việc lại càng dễ dàng.

Thân

smilie
[Up] [Print Copy]
  [Discussion]   Bảo đảm toàn vẹn dữ liệu 17/02/2010 21:17:49 (+0700) | #8 | 205115
[Avatar]
ORA2009
Member

[Minus]    0    [Plus]
Joined: 31/08/2009 11:04:02
Messages: 109
Offline
[Profile] [PM]
Theo mình hiểu bằng cách nào đó attacker chiếm được quyền của ROOT hoặc DBA thì coi như mọi chuyện đã xong. Khó lòng cứu vãn được.
[Up] [Print Copy]
  [Discussion]   Bảo đảm toàn vẹn dữ liệu 18/02/2010 14:30:01 (+0700) | #9 | 205128
beta14
Member

[Minus]    0    [Plus]
Joined: 12/02/2010 05:17:58
Messages: 10
Offline
[Profile] [PM]
Mọi người đang nói đi đâu vậy? Tôi đang bàn đến cái khó về cơ sở hạ tầng, không phải ai cũng có server, VPS riêng nên mới bị local attack. Hoặc nếu có server riêng, nhưng có thể bị sơ hở ở chỗ nào khác trên server như: 1 server có nhiều site, site X nào đó bị lỗ hổng...
[Up] [Print Copy]
  [Discussion]   Bảo đảm toàn vẹn dữ liệu 24/02/2010 16:31:00 (+0700) | #10 | 205453
beta14
Member

[Minus]    0    [Plus]
Joined: 12/02/2010 05:17:58
Messages: 10
Offline
[Profile] [PM]
Hết cao thủ rồi sao? Không dám múa rìu qua mắt thợ.
[Up] [Print Copy]
  [Discussion]   Bảo đảm toàn vẹn dữ liệu 24/02/2010 20:55:43 (+0700) | #11 | 205472
[Avatar]
WinDak
Researcher

Joined: 27/01/2002 11:15:00
Messages: 223
Offline
[Profile] [PM]
Vấn đề của ban đưa ra quá chung chung và rồi loạn nên mọi người không biết trả lời thế nào mới không "nói đi đâu đấy".

Bạn có thể tóm gọn lại bài post đầu tiên của bạn và

Tôi đang bàn đến cái khó về cơ sở hạ tầng, không phải ai cũng có server, VPS riêng nên mới bị local attack. Hoặc nếu có server riêng, nhưng có thể bị sơ hở ở chỗ nào khác trên server như: 1 server có nhiều site, site X nào đó bị lỗ hổng...
 


thành một vấn đề... như vậy có lẽ sẽ nhiều người comment hơn

Thân
wd.
-- w~ --
[Up] [Print Copy]
  [Discussion]   Bảo đảm toàn vẹn dữ liệu 25/02/2010 08:42:54 (+0700) | #12 | 205497
myquartz
Member

[Minus]    0    [Plus]
Joined: 04/01/2005 04:58:30
Messages: 563
Offline
[Profile] [PM]
Mình đoán rằng mong muốn của bạn là bạn bị cướp quyền admin của MySQL, nhưng các file code không bị làm sao (có thể bị xem nhưng không thể thay đổi).
Và bạn muốn đảm bảo rằng DB của bạn phải toàn vẹn, mới cho phép truy cập.
Cái này nói chung là không quá khó, nhưng sẽ tốn thêm công và tất nhiên hệ thống sẽ chậm đi. Ví dụ bạn có thể áp dụng chữ ký điện tử vào DB, có thêm 1 cột chứa digital signature của các field còn lại. Trong code có mã kiểm tra chữ ký + public key để check có hợp lệ hay không, để biết bản ghi đó có bị thay đổi hay ko hợp lệ...
Việc tạo chữ ký thì là offline, private key bạn giữ tại client, mỗi khi có update row thì phải thực hiện việc ký lại các field đó tại client và update lại cột chữ ký.
Như vậy, nếu có ai đó thay đổi dữ liệu, chữ ký ko match thì ko còn vào được nữa. Tất nhiên code không bị thay đổi nên attacker không thể bypass việc check đó.
Việc này chỉ chống được có thế, chứ nếu attacker drop luôn các bảng của bạn, hệ thống ko xài được nữa, thì ... nói chung hậu quả có thể vẫn đáng kể.
Cách này người ta thường áp dụng cho 1 số giao dịch tài chính ngân hàng, để đảm bảo toàn vẹn của dữ liệu giao dịch sinh ra trong hệ thống (nghĩa là hacker không thể sinh ra giao dịch giả mạo, tác giả sinh GD là ai thì sẽ có chữ ký tương ứng xác nhận)
[Up] [Print Copy]
  [Discussion]   Bảo đảm toàn vẹn dữ liệu 25/02/2010 14:36:54 (+0700) | #13 | 205520
[Avatar]
conmale
Administrator

Joined: 07/05/2004 23:43:15
Messages: 9353
Location: down under
Offline
[Profile] [PM]

beta14 wrote:
Chào mọi người.

Mình đang tập làm 1 module bảo mật cho dữ liệu chứa trong MySQL và chạy bằng PHP.

Dữ liệu:
1) Có bảng chứa tài khoản người dùng: USERS bao gồm: user_id, user_name, user_pass, user_auth...
2) Bảng AUTH chứ danh sách cấp bậc của USERS: auth_id, auth_type, user_id,....

Vấn đề đặt ra là:
1) Có người xâm nhập vào MySQL như bị local attack
2) Người này sửa user_auth của user nào đó thành 1, tức thành Quản trị


Giải pháp nào cho:
1) Có thể bị mất database, bị sửa MySQL trái phép từ ngoài.
2) Tuy nhiên, nếu sửa lại user_auth thành Quản trị thì cũng không được gì.

Ở trường hợp này, tính toàn vẹn của dữ liệu trong bảng đã không hợp lệ. Vậy có giải pháp nào để đảm bảo tính toán vẹn đó?

Thân chào. 


----> khắc phục cái rễ, đừng khắc phục cái ngọn. Khắc phục bảo mật cho 1 và 2.
What bringing us together is stronger than what pulling us apart.
[Up] [Print Copy]
  [Discussion]   Bảo đảm toàn vẹn dữ liệu 26/02/2010 16:54:10 (+0700) | #14 | 205626
myquartz
Member

[Minus]    0    [Plus]
Joined: 04/01/2005 04:58:30
Messages: 563
Offline
[Profile] [PM]

conmale wrote:


----> khắc phục cái rễ, đừng khắc phục cái ngọn. Khắc phục bảo mật cho 1 và 2. 


Em tưởng bác nói ngọng, khắc phục cái dễ...
Bác nên nói là: "khắc phục cái gốc, đừng khắc phục cái ngọn".

Ôi tiếng Việt.
[Up] [Print Copy]
  [Discussion]   Bảo đảm toàn vẹn dữ liệu 27/02/2010 05:41:28 (+0700) | #15 | 205665
[Avatar]
conmale
Administrator

Joined: 07/05/2004 23:43:15
Messages: 9353
Location: down under
Offline
[Profile] [PM]

myquartz wrote:

conmale wrote:


----> khắc phục cái rễ, đừng khắc phục cái ngọn. Khắc phục bảo mật cho 1 và 2. 


Em tưởng bác nói ngọng, khắc phục cái dễ...
Bác nên nói là: "khắc phục cái gốc, đừng khắc phục cái ngọn".

Ôi tiếng Việt. 


Cám ơn bồ. Tôi hiểu là "rễ" ở đây chính là "gốc rễ" (root trong tiếng Anh). Tôi chưa hề nói ngọng bao giờ smilie .
What bringing us together is stronger than what pulling us apart.
[Up] [Print Copy]
  [Discussion]   Bảo đảm toàn vẹn dữ liệu 07/03/2010 03:46:40 (+0700) | #16 | 206351
beta14
Member

[Minus]    0    [Plus]
Joined: 12/02/2010 05:17:58
Messages: 10
Offline
[Profile] [PM]

myquartz wrote:
Mình đoán rằng mong muốn của bạn là bạn bị cướp quyền admin của MySQL, nhưng các file code không bị làm sao (có thể bị xem nhưng không thể thay đổi).
Và bạn muốn đảm bảo rằng DB của bạn phải toàn vẹn, mới cho phép truy cập.
Cái này nói chung là không quá khó, nhưng sẽ tốn thêm công và tất nhiên hệ thống sẽ chậm đi. Ví dụ bạn có thể áp dụng chữ ký điện tử vào DB, có thêm 1 cột chứa digital signature của các field còn lại. Trong code có mã kiểm tra chữ ký + public key để check có hợp lệ hay không, để biết bản ghi đó có bị thay đổi hay ko hợp lệ...
Việc tạo chữ ký thì là offline, private key bạn giữ tại client, mỗi khi có update row thì phải thực hiện việc ký lại các field đó tại client và update lại cột chữ ký.
Như vậy, nếu có ai đó thay đổi dữ liệu, chữ ký ko match thì ko còn vào được nữa. Tất nhiên code không bị thay đổi nên attacker không thể bypass việc check đó.
Việc này chỉ chống được có thế, chứ nếu attacker drop luôn các bảng của bạn, hệ thống ko xài được nữa, thì ... nói chung hậu quả có thể vẫn đáng kể.
Cách này người ta thường áp dụng cho 1 số giao dịch tài chính ngân hàng, để đảm bảo toàn vẹn của dữ liệu giao dịch sinh ra trong hệ thống (nghĩa là hacker không thể sinh ra giao dịch giả mạo, tác giả sinh GD là ai thì sẽ có chữ ký tương ứng xác nhận) 


Đúng quá. Đây là cái mình đang muốn thảo luận nhưng có tính chất cây nhà lá vườn hơn chứ không có ý định phải làm cả 1 hệ thống đồ sộ như Paypal, MoneyBookers...

conmale wrote:
----> khắc phục cái rễ, đừng khắc phục cái ngọn. Khắc phục bảo mật cho 1 và 2. 


Trả lời kiểu đánh đố này thì chẳng khác nào khi muốn quan hệ tình dục với phụ nữ nào đó thì nên check rồi xử virus HIV có trong máu chứ dùng BCS thì có mà bị lòi rễ smilie smilie smilie Bác này chắc chưa hiểu đạo lý sống: "Sống chung với lũ" là như thế nào hoặc như người Nhật: "Sống chung với động đất"
[Up] [Print Copy]
  [Discussion]   Bảo đảm toàn vẹn dữ liệu 07/03/2010 05:40:09 (+0700) | #17 | 206353
[Avatar]
conmale
Administrator

Joined: 07/05/2004 23:43:15
Messages: 9353
Location: down under
Offline
[Profile] [PM]

beta14 wrote:


conmale wrote:
----> khắc phục cái rễ, đừng khắc phục cái ngọn. Khắc phục bảo mật cho 1 và 2. 


Trả lời kiểu đánh đố này thì chẳng khác nào khi muốn quan hệ tình dục với phụ nữ nào đó thì nên check rồi xử virus HIV có trong máu chứ dùng BCS thì có mà bị lòi rễ smilie smilie smilie Bác này chắc chưa hiểu đạo lý sống: "Sống chung với lũ" là như thế nào hoặc như người Nhật: "Sống chung với động đất" 


Tôi chẳng đánh đố, tôi chẳng trả lời mà tôi chỉ khuyên bạn. Việc bạn so sánh điều tôi khuyên bạn với chuyện quan hệ tình dục hay đạo lý 'sống chung với lũ' gì gì đó hoàn toàn lạc đề.

Bạn đưa ra vấn đề như thể làm thế nào để đừng cho thằng ăn trộm chôm đồ của mình sau khi nó đã vào được trong nhà và cầm trong tay một chùm chìa khóa có thể mở tất cả các tủ vậy. Đây là chuyện buồn cười. Bạn nên nghĩ đến chuyện làm sao không cho thằng ăn trộm vào nhà chớ đừng nghĩ đến chuyện nó đã vào nhà rồi thì làm gì.
What bringing us together is stronger than what pulling us apart.
[Up] [Print Copy]
  [Discussion]   Bảo đảm toàn vẹn dữ liệu 09/03/2010 21:51:01 (+0700) | #18 | 206525
beta14
Member

[Minus]    0    [Plus]
Joined: 12/02/2010 05:17:58
Messages: 10
Offline
[Profile] [PM]

conmale wrote:

beta14 wrote:


conmale wrote:
----> khắc phục cái rễ, đừng khắc phục cái ngọn. Khắc phục bảo mật cho 1 và 2. 


Trả lời kiểu đánh đố này thì chẳng khác nào khi muốn quan hệ tình dục với phụ nữ nào đó thì nên check rồi xử virus HIV có trong máu chứ dùng BCS thì có mà bị lòi rễ smilie smilie smilie Bác này chắc chưa hiểu đạo lý sống: "Sống chung với lũ" là như thế nào hoặc như người Nhật: "Sống chung với động đất" 


Tôi chẳng đánh đố, tôi chẳng trả lời mà tôi chỉ khuyên bạn. Việc bạn so sánh điều tôi khuyên bạn với chuyện quan hệ tình dục hay đạo lý 'sống chung với lũ' gì gì đó hoàn toàn lạc đề.

Bạn đưa ra vấn đề như thể làm thế nào để đừng cho thằng ăn trộm chôm đồ của mình sau khi nó đã vào được trong nhà và cầm trong tay một chùm chìa khóa có thể mở tất cả các tủ vậy. Đây là chuyện buồn cười. Bạn nên nghĩ đến chuyện làm sao không cho thằng ăn trộm vào nhà chớ đừng nghĩ đến chuyện nó đã vào nhà rồi thì làm gì. 


Có lẽ bạn đang tạo ra một chuỗi truyện cười, hay do bạn cố tình không hiểu? Hơn 95% các doanh nghiệp là nhỏ và vừa, cũng gần bằng đó số người dân phải sống nhà thuê chứ không phải nhà riêng của họ, ngay cả khi bạn dẫn gái vào thuê phòng trong khách sạn thì căn phòng đó cũng chưa hẳn đã là của riêng bạn để giữ kín dữ liệu nhảy cảm của mình. Không biết với những ví dụ như vậy thì bạn có hình dung được cái case mà tôi muốn bàn đến?
[Up] [Print Copy]
  [Discussion]   Bảo đảm toàn vẹn dữ liệu 09/03/2010 22:25:28 (+0700) | #19 | 206530
[Avatar]
1661
Member

[Minus]    0    [Plus]
Joined: 18/02/2010 03:25:37
Messages: 51
Offline
[Profile] [PM]
Túm lại là có thể làm được bằng cách coding ngay từ phía applicaton và sử dụng các biện pháp mã hóa dữ liệu --> để đảm bảo dữ liệu nhạy cảm ko bị đọc trộm trong trường hợp Hacker bê được cả Server của bạn về nhà hẳn.

Còn giả sử tôi tôi đã thâm nhập đc vào Server và lấy được quyền DBA rồi thì làm sao ngăn tôi update, insert, drop table ... ? hay một hình thức phá hoại nào khác ? Rất khó !!





[Up] [Print Copy]
  [Discussion]   Bảo đảm toàn vẹn dữ liệu 10/03/2010 03:54:39 (+0700) | #20 | 206541
[Avatar]
conmale
Administrator

Joined: 07/05/2004 23:43:15
Messages: 9353
Location: down under
Offline
[Profile] [PM]

beta14 wrote:

conmale wrote:

beta14 wrote:


conmale wrote:
----> khắc phục cái rễ, đừng khắc phục cái ngọn. Khắc phục bảo mật cho 1 và 2. 


Trả lời kiểu đánh đố này thì chẳng khác nào khi muốn quan hệ tình dục với phụ nữ nào đó thì nên check rồi xử virus HIV có trong máu chứ dùng BCS thì có mà bị lòi rễ smilie smilie smilie Bác này chắc chưa hiểu đạo lý sống: "Sống chung với lũ" là như thế nào hoặc như người Nhật: "Sống chung với động đất" 


Tôi chẳng đánh đố, tôi chẳng trả lời mà tôi chỉ khuyên bạn. Việc bạn so sánh điều tôi khuyên bạn với chuyện quan hệ tình dục hay đạo lý 'sống chung với lũ' gì gì đó hoàn toàn lạc đề.

Bạn đưa ra vấn đề như thể làm thế nào để đừng cho thằng ăn trộm chôm đồ của mình sau khi nó đã vào được trong nhà và cầm trong tay một chùm chìa khóa có thể mở tất cả các tủ vậy. Đây là chuyện buồn cười. Bạn nên nghĩ đến chuyện làm sao không cho thằng ăn trộm vào nhà chớ đừng nghĩ đến chuyện nó đã vào nhà rồi thì làm gì. 


Có lẽ bạn đang tạo ra một chuỗi truyện cười, hay do bạn cố tình không hiểu? Hơn 95% các doanh nghiệp là nhỏ và vừa, cũng gần bằng đó số người dân phải sống nhà thuê chứ không phải nhà riêng của họ, ngay cả khi bạn dẫn gái vào thuê phòng trong khách sạn thì căn phòng đó cũng chưa hẳn đã là của riêng bạn để giữ kín dữ liệu nhảy cảm của mình. Không biết với những ví dụ như vậy thì bạn có hình dung được cái case mà tôi muốn bàn đến? 


Bạn mang chuyện "dẫn gái vào khách sạn" ở đây là khập khiễng rồi. Việc bạn muốn nêu ra là trong tình huống bạn dùng share hosting và dùng chung CSDL nên có thể bị thâm nhập hoàn toàn khác với tình huống bạn "dẫn gái vào khách sạn". Nếu cần so sánh, bạn nên so sánh với hoàn cảnh bạn thuê chung một cửa hàng và dùng chung kho chứa hàng với những người khác. Trong tình huống ấy, bạn ngại rằng có người nào đó vào kho chứa hàng và chôm hàng của bạn thì có lý.

Với hoàn cảnh dùng chung kho chứa hàng như trên, bạn đang tìm cách khóa từng bao hàng lại bằng các ổ khóa riêng của mình (khóa các database tables) nhưng chủ nhà hàng và kho hàng có chiếc chìa khóa vạn năng nên muốn mở cái gì ra cũng được. Bởi thế, bạn lay hoay làm một việc vô ích.

Đi sát vào ví dụ trên CSDL của bạn, bạn bảo:

1) Có bảng chứa tài khoản người dùng: USERS bao gồm: user_id, user_name, user_pass, user_auth...
2) Bảng AUTH chứ danh sách cấp bậc của USERS: auth_id, auth_type, user_id,....

Vấn đề đặt ra là:
1) Có người xâm nhập vào MySQL như bị local attack
2) Người này sửa user_auth của user nào đó thành 1, tức thành Quản trị

Giải pháp nào cho:
1) Có thể bị mất database, bị sửa MySQL trái phép từ ngoài.
2) Tuy nhiên, nếu sửa lại user_auth thành Quản trị thì cũng không được gì.  


Điều bạn cần hiểu là chức năng của CSDL (A) là cái gì và chức năng của ứng dụng nào đó (B) truy vấn vào CSDL để lấy dữ liệu là gì. Khi một thông tin nào đó được thay đổi trên cơ sở dữ liệu (A) nhưng ứng dụng (B) không hề biết và ứng dụng (B) chỉ có thể đọc và sử dụng dữ liệu có sẵn trên (A) để thực thi một công tác nào đó thì (A) cung cấp cái gì, (B) sẽ dùng cái nấy.

Nếu user_auth bị thay đổi và (B) đọc thông tin đã thay đổi này thì nó sẽ thực hiện công tác y hệt như những gì (A) đã cung câp (với thông tin đã thay đổi). Bởi thế, việc quan trọng là làm sao không cho ai đó hoặc một cơ chế nào đó vào AUTH để thay đổi giá trị user_auth chớ không phải là việc làm gì nếu user_auth đã bị thay đổi.

Nếu bạn muốn tạo một lớp kiểm nghiệm chặt chẽ, bạn không thể đơn thuần buộc (B) dùng những gì nó truy vấn và lấy được từ (A) cho giá trị user_auth mà bạn nên buộc (B) phải kiểm chứng nhiều dữ kiện khác trước khi thực thi authorisation. Ví dụ, ngoài giá trị user_auth lấy được, bạn có thể xét xem user_id ấy thuộc những group nào, đã được áp dụng giá trị "1" từ khi nào, đã được ai chấp nhận... những thông tin này thuộc về những bảng khác trong CSDL và càng nhiều dữ kiện được dùng để kiểm chứng thì tính bảo mật của nó càng cao. Nếu chỉ dựa vào một dữ kiện "user_auth" để đi đến quyết định thực thi authorisation thì logic và tính bảo mật của ứng dụng (B) quá kém. Ngay cả áp dụng nhiều dữ kiện khác để kiểm nghiệm giá trị xác thực của user_id ấy đi chăng nữa, nếu ai đó đã có thể có quyền truy cập vào CSDL và thực thi các SQL statements thì rào cản này bị phá vỡ.

Cách chặt chẽ hơn một tí là giá trị user_auth không phải là 1, 2 hoặc 1 INT đơn giản nào đó mà có thể là một chuỗi hash. Chuỗi hash này được tạo ra từ tổng hợp các dữ kiện quyết định user_id này có chủ quyền nào đó. Khi (B) query user_auth và lấy được chuỗi hash, B phải thu thập các dữ kiện cần thiết để tạo ra một chuỗi hash khác rồi so sánh với giá trị lấy được từ CSDL (A). Nếu hai giá trị hash này trùng khít thì user_id ấy mới được authorised. Một kẻ nào đó thâm nhập nếu không nắm được logic tạo hash từ các dữ kiện cần thiết thì hắn khó lòng tạo ra một hash tương thích để nâng chủ quyền cho user_id được. Tất nhiên, những ứng dụng nào hoàn toàn thuộc về (B) chớ không thuộc về (A). (A) chỉ là CSDL và nó chỉ chứa dữ liệu không hơn không kém.

PS: không nên tỏ thái độ hằn học khi ai đó góp ý cho mình. Đặc biệt khi mình chưa có đủ tầm nhìn để hiểu sự việc một cách bao quát.
What bringing us together is stronger than what pulling us apart.
[Up] [Print Copy]
  [Discussion]   Bảo đảm toàn vẹn dữ liệu 06/04/2010 00:40:39 (+0700) | #21 | 208472
[Avatar]
stylish_man
Member

[Minus]    0    [Plus]
Joined: 26/10/2007 11:05:48
Messages: 17
Offline
[Profile] [PM]
Cảm ơn những gợi ý của anh comale.
[Up] [Print Copy]
  [Discussion]   Bảo đảm toàn vẹn dữ liệu 06/04/2010 00:47:30 (+0700) | #22 | 208473
[Avatar]
stylish_man
Member

[Minus]    0    [Plus]
Joined: 26/10/2007 11:05:48
Messages: 17
Offline
[Profile] [PM]
Ah không "chú" comale chứ.( Nên tôn trọng và học hỏi kinh nghiệm từ những người "lớn tuổi" smilie )
[Up] [Print Copy]
  [Discussion]   Bảo đảm toàn vẹn dữ liệu 06/04/2010 05:04:44 (+0700) | #23 | 208477
[Avatar]
conmale
Administrator

Joined: 07/05/2004 23:43:15
Messages: 9353
Location: down under
Offline
[Profile] [PM]

stylish_man wrote:
Ah không "chú" comale chứ.( Nên tôn trọng và học hỏi kinh nghiệm từ những người "lớn tuổi" smilie


Tuổi tác gì đây bồ? Nếu quan trọng chuyện tuổi tác mà đưa "chú" và "lớn tuổi" vào ngoặc kép thì phản tác dụng rồi.
What bringing us together is stronger than what pulling us apart.
[Up] [Print Copy]
  [Discussion]   Bảo đảm toàn vẹn dữ liệu 06/04/2010 08:56:19 (+0700) | #24 | 208485
bo17age
Member

[Minus]    0    [Plus]
Joined: 29/11/2007 10:27:52
Messages: 9
Offline
[Profile] [PM]
Cái này mình nghĩ cũng không khó..
trong bảng của bạn có thể thêm vào 1 field mới tên auth_salt
field auth_salt này được tính toán dựa trên các field user_id, user_name, user_pass, user_auth.. mà bạn đã có từ trước, thuật toán tín toán này attacker không thể biết và thay đổi.
Như vậy chỉ khi auth_salt đúng thì app mới xác thực thành công. smilie
[Up] [Print Copy]
[digg] [delicious] [google] [yahoo] [technorati] [reddit] [stumbleupon]
Go to: 
 Users currently in here 
1 Anonymous

Powered by JForum - Extended by HVAOnline
 hvaonline.net  |  hvaforum.net  |  hvazone.net  |  hvanews.net  |  vnhacker.org
1999 - 2013 © v2012|0504|218|